Switch Cranelift over to regalloc2. (#3989)
This PR switches Cranelift over to the new register allocator, regalloc2. See [this document](https://gist.github.com/cfallin/08553421a91f150254fe878f67301801) for a summary of the design changes. This switchover has implications for core VCode/MachInst types and the lowering pass. Overall, this change brings improvements to both compile time and speed of generated code (runtime), as reported in #3942: ``` Benchmark Compilation (wallclock) Execution (wallclock) blake3-scalar 25% faster 28% faster blake3-simd no diff no diff meshoptimizer 19% faster 17% faster pulldown-cmark 17% faster no diff bz2 15% faster no diff SpiderMonkey, 21% faster 2% faster fib(30) clang.wasm 42% faster N/A ```
This commit is contained in:
@@ -10,14 +10,9 @@ block0(v0: i64, v1: i32):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldr w0, [x0, w1, SXTW]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldr w0, [x0, w1, SXTW]
|
||||
; ret
|
||||
|
||||
function %f6(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -27,14 +22,9 @@ block0(v0: i64, v1: i32):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldr w0, [x0, w1, SXTW]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldr w0, [x0, w1, SXTW]
|
||||
; ret
|
||||
|
||||
function %f7(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -45,15 +35,10 @@ block0(v0: i32, v1: i32):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: ldr w0, [x0, w1, UXTW]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w6, w0
|
||||
; ldr w0, [x6, w1, UXTW]
|
||||
; ret
|
||||
|
||||
function %f8(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -66,17 +51,12 @@ block0(v0: i64, v1: i32):
|
||||
return v7
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: add x2, x0, #68
|
||||
; Inst 1: add x0, x2, x0
|
||||
; Inst 2: add x0, x0, x1, SXTW
|
||||
; Inst 3: ldr w0, [x0, w1, SXTW]
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x6, x0, #68
|
||||
; add x6, x6, x0
|
||||
; add x6, x6, x1, SXTW
|
||||
; ldr w0, [x6, w1, SXTW]
|
||||
; ret
|
||||
|
||||
function %f9(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -88,16 +68,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v7
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: add x0, x0, x2
|
||||
; Inst 1: add x0, x0, x1
|
||||
; Inst 2: ldur w0, [x0, #48]
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x0, x2
|
||||
; add x0, x0, x1
|
||||
; ldr w0, [x0, #48]
|
||||
; ret
|
||||
|
||||
function %f10(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -109,17 +84,12 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v7
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: movz x3, #4100
|
||||
; Inst 1: add x1, x3, x1
|
||||
; Inst 2: add x1, x1, x2
|
||||
; Inst 3: ldr w0, [x1, x0]
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x8, #4100
|
||||
; add x8, x8, x1
|
||||
; add x8, x8, x2
|
||||
; ldr w0, [x8, x0]
|
||||
; ret
|
||||
|
||||
function %f10() -> i32 {
|
||||
block0:
|
||||
@@ -128,15 +98,10 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #1234
|
||||
; Inst 1: ldr w0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #1234
|
||||
; ldr w0, [x2]
|
||||
; ret
|
||||
|
||||
function %f11(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -146,15 +111,10 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: add x0, x0, #8388608
|
||||
; Inst 1: ldr w0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x4, x0, #8388608
|
||||
; ldr w0, [x4]
|
||||
; ret
|
||||
|
||||
function %f12(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -164,15 +124,10 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sub x0, x0, #4
|
||||
; Inst 1: ldr w0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub x4, x0, #4
|
||||
; ldr w0, [x4]
|
||||
; ret
|
||||
|
||||
function %f13(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -182,17 +137,12 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: movz w1, #51712
|
||||
; Inst 1: movk w1, #15258, LSL #16
|
||||
; Inst 2: add x0, x1, x0
|
||||
; Inst 3: ldr w0, [x0]
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz w4, #51712
|
||||
; movk w4, #15258, LSL #16
|
||||
; add x4, x4, x0
|
||||
; ldr w0, [x4]
|
||||
; ret
|
||||
|
||||
function %f14(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -201,15 +151,10 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: ldr w0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x4, w0
|
||||
; ldr w0, [x4]
|
||||
; ret
|
||||
|
||||
function %f15(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -220,15 +165,10 @@ block0(v0: i32, v1: i32):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: ldr w0, [x0, w1, SXTW]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x6, w0
|
||||
; ldr w0, [x6, w1, SXTW]
|
||||
; ret
|
||||
|
||||
function %f18(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -238,15 +178,10 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movn w0, #4097
|
||||
; Inst 1: ldrsh x0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn w8, #4097
|
||||
; ldrsh x0, [x8]
|
||||
; ret
|
||||
|
||||
function %f19(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -256,15 +191,10 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #4098
|
||||
; Inst 1: ldrsh x0, [x0]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x8, #4098
|
||||
; ldrsh x0, [x8]
|
||||
; ret
|
||||
|
||||
function %f20(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -274,16 +204,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: movn w0, #4097
|
||||
; Inst 1: sxtw x0, w0
|
||||
; Inst 2: ldrsh x0, [x0]
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn w8, #4097
|
||||
; sxtw x10, w8
|
||||
; ldrsh x0, [x10]
|
||||
; ret
|
||||
|
||||
function %f21(i64, i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -293,16 +218,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: movz x0, #4098
|
||||
; Inst 1: sxtw x0, w0
|
||||
; Inst 2: ldrsh x0, [x0]
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x8, #4098
|
||||
; sxtw x10, w8
|
||||
; ldrsh x0, [x10]
|
||||
; ret
|
||||
|
||||
function %i128(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -311,17 +231,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov x1, x0
|
||||
; Inst 1: ldp x2, x1, [x1]
|
||||
; Inst 2: stp x2, x1, [x0]
|
||||
; Inst 3: mov x0, x2
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x8, x0
|
||||
; ldp x3, x1, [x8]
|
||||
; mov x11, x3
|
||||
; stp x11, x1, [x0]
|
||||
; mov x0, x3
|
||||
; ret
|
||||
|
||||
function %i128_imm_offset(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -330,17 +246,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov x1, x0
|
||||
; Inst 1: ldp x2, x1, [x1, #16]
|
||||
; Inst 2: stp x2, x1, [x0, #16]
|
||||
; Inst 3: mov x0, x2
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x8, x0
|
||||
; ldp x3, x1, [x8, #16]
|
||||
; mov x11, x3
|
||||
; stp x11, x1, [x0, #16]
|
||||
; mov x0, x3
|
||||
; ret
|
||||
|
||||
function %i128_imm_offset_large(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -349,17 +261,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov x1, x0
|
||||
; Inst 1: ldp x2, x1, [x1, #504]
|
||||
; Inst 2: stp x2, x1, [x0, #504]
|
||||
; Inst 3: mov x0, x2
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x8, x0
|
||||
; ldp x3, x1, [x8, #504]
|
||||
; mov x11, x3
|
||||
; stp x11, x1, [x0, #504]
|
||||
; mov x0, x3
|
||||
; ret
|
||||
|
||||
function %i128_imm_offset_negative_large(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -368,17 +276,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov x1, x0
|
||||
; Inst 1: ldp x2, x1, [x1, #-512]
|
||||
; Inst 2: stp x2, x1, [x0, #-512]
|
||||
; Inst 3: mov x0, x2
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x8, x0
|
||||
; ldp x3, x1, [x8, #-512]
|
||||
; mov x11, x3
|
||||
; stp x11, x1, [x0, #-512]
|
||||
; mov x0, x3
|
||||
; ret
|
||||
|
||||
function %i128_add_offset(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -388,17 +292,13 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov x1, x0
|
||||
; Inst 1: ldp x2, x1, [x1, #32]
|
||||
; Inst 2: stp x2, x1, [x0, #32]
|
||||
; Inst 3: mov x0, x2
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x8, x0
|
||||
; ldp x3, x1, [x8, #32]
|
||||
; mov x11, x3
|
||||
; stp x11, x1, [x0, #32]
|
||||
; mov x0, x3
|
||||
; ret
|
||||
|
||||
function %i128_32bit_sextend_simple(i32) -> i128 {
|
||||
block0(v0: i32):
|
||||
@@ -408,18 +308,13 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: sxtw x1, w0
|
||||
; Inst 1: ldp x2, x1, [x1]
|
||||
; Inst 2: sxtw x0, w0
|
||||
; Inst 3: stp x2, x1, [x0]
|
||||
; Inst 4: mov x0, x2
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x8, w0
|
||||
; ldp x4, x1, [x8]
|
||||
; sxtw x9, w0
|
||||
; mov x0, x4
|
||||
; stp x0, x1, [x9]
|
||||
; ret
|
||||
|
||||
function %i128_32bit_sextend(i64, i32) -> i128 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -431,18 +326,14 @@ block0(v0: i64, v1: i32):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: mov x2, x0
|
||||
; Inst 1: add x2, x2, x1, SXTW
|
||||
; Inst 2: ldp x3, x2, [x2, #24]
|
||||
; Inst 3: add x0, x0, x1, SXTW
|
||||
; Inst 4: stp x3, x2, [x0, #24]
|
||||
; Inst 5: mov x0, x3
|
||||
; Inst 6: mov x1, x2
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x10, x0
|
||||
; add x10, x10, x1, SXTW
|
||||
; ldp x6, x7, [x10, #24]
|
||||
; add x0, x0, x1, SXTW
|
||||
; mov x15, x6
|
||||
; mov x1, x7
|
||||
; stp x15, x1, [x0, #24]
|
||||
; mov x0, x6
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,14 +8,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f2(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -23,14 +18,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sub x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f3(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -38,14 +28,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: madd x0, x0, x1, xzr
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; madd x0, x0, x1, xzr
|
||||
; ret
|
||||
|
||||
function %f4(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -53,14 +38,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umulh x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umulh x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f5(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -68,14 +48,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smulh x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smulh x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f6(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -83,18 +58,13 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: cbnz x1, 8 ; udf
|
||||
; Inst 1: adds xzr, x1, #1
|
||||
; Inst 2: ccmp x0, #1, #nzcv, eq
|
||||
; Inst 3: b.vc 8 ; udf
|
||||
; Inst 4: sdiv x0, x0, x1
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; adds xzr, x1, #1
|
||||
; ccmp x0, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; sdiv x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f7(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -103,15 +73,10 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: orr x1, xzr, #2
|
||||
; Inst 1: sdiv x0, x0, x1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x3, xzr, #2
|
||||
; sdiv x0, x0, x3
|
||||
; ret
|
||||
|
||||
function %f8(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -119,15 +84,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: cbnz x1, 8 ; udf
|
||||
; Inst 1: udiv x0, x0, x1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; udiv x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f9(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -136,15 +96,10 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: orr x1, xzr, #2
|
||||
; Inst 1: udiv x0, x0, x1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x3, xzr, #2
|
||||
; udiv x0, x0, x3
|
||||
; ret
|
||||
|
||||
function %f10(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -152,16 +107,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: cbnz x1, 8 ; udf
|
||||
; Inst 1: sdiv x2, x0, x1
|
||||
; Inst 2: msub x0, x2, x1, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; sdiv x6, x0, x1
|
||||
; msub x0, x6, x1, x0
|
||||
; ret
|
||||
|
||||
function %f11(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -169,16 +119,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: cbnz x1, 8 ; udf
|
||||
; Inst 1: udiv x2, x0, x1
|
||||
; Inst 2: msub x0, x2, x1, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cbnz x1, 8 ; udf
|
||||
; udiv x6, x0, x1
|
||||
; msub x0, x6, x1, x0
|
||||
; ret
|
||||
|
||||
function %f12(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -186,20 +131,15 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: sxtw x1, w1
|
||||
; Inst 2: cbnz x1, 8 ; udf
|
||||
; Inst 3: adds wzr, w1, #1
|
||||
; Inst 4: ccmp w0, #1, #nzcv, eq
|
||||
; Inst 5: b.vc 8 ; udf
|
||||
; Inst 6: sdiv x0, x0, x1
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x5, w0
|
||||
; sxtw x7, w1
|
||||
; cbnz x7, 8 ; udf
|
||||
; adds wzr, w7, #1
|
||||
; ccmp w5, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; sdiv x0, x5, x7
|
||||
; ret
|
||||
|
||||
function %f13(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -208,16 +148,11 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: orr x1, xzr, #2
|
||||
; Inst 2: sdiv x0, x0, x1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x3, w0
|
||||
; orr x5, xzr, #2
|
||||
; sdiv x0, x3, x5
|
||||
; ret
|
||||
|
||||
function %f14(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -225,17 +160,12 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: mov w1, w1
|
||||
; Inst 2: cbnz x1, 8 ; udf
|
||||
; Inst 3: udiv x0, x0, x1
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w5, w0
|
||||
; mov w7, w1
|
||||
; cbnz x7, 8 ; udf
|
||||
; udiv x0, x5, x7
|
||||
; ret
|
||||
|
||||
function %f15(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -244,16 +174,11 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: orr x1, xzr, #2
|
||||
; Inst 2: udiv x0, x0, x1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w3, w0
|
||||
; orr x5, xzr, #2
|
||||
; udiv x0, x3, x5
|
||||
; ret
|
||||
|
||||
function %f16(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -261,18 +186,13 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: sxtw x1, w1
|
||||
; Inst 2: cbnz x1, 8 ; udf
|
||||
; Inst 3: sdiv x2, x0, x1
|
||||
; Inst 4: msub x0, x2, x1, x0
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x5, w0
|
||||
; sxtw x7, w1
|
||||
; cbnz x7, 8 ; udf
|
||||
; sdiv x10, x5, x7
|
||||
; msub x0, x10, x7, x5
|
||||
; ret
|
||||
|
||||
function %f17(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -280,18 +200,13 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: mov w1, w1
|
||||
; Inst 2: cbnz x1, 8 ; udf
|
||||
; Inst 3: udiv x2, x0, x1
|
||||
; Inst 4: msub x0, x2, x1, x0
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w5, w0
|
||||
; mov w7, w1
|
||||
; cbnz x7, 8 ; udf
|
||||
; udiv x10, x5, x7
|
||||
; msub x0, x10, x7, x5
|
||||
; ret
|
||||
|
||||
function %f18(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -299,14 +214,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: and x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f19(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -314,14 +224,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orr x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f20(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -329,14 +234,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: eor x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eor x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f21(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -344,14 +244,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: bic x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; bic x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f22(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -359,14 +254,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orn x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orn x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f23(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -374,14 +264,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: eon x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eon x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f24(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -389,14 +274,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orn x0, xzr, x0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orn x0, xzr, x0
|
||||
; ret
|
||||
|
||||
function %f25(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -406,14 +286,9 @@ block0(v0: i32, v1: i32):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sub w0, w1, w0, LSL 21
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub w0, w1, w0, LSL 21
|
||||
; ret
|
||||
|
||||
function %f26(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -422,14 +297,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sub w0, w0, #1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub w0, w0, #1
|
||||
; ret
|
||||
|
||||
function %f27(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -438,14 +308,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, #1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, #1
|
||||
; ret
|
||||
|
||||
function %f28(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -454,14 +319,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add x0, x0, #1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x0, #1
|
||||
; ret
|
||||
|
||||
function %f29(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -470,15 +330,10 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #1
|
||||
; Inst 1: sub x0, xzr, x0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x3, #1
|
||||
; sub x0, xzr, x3
|
||||
; ret
|
||||
|
||||
function %f30(i8x16) -> i8x16 {
|
||||
block0(v0: i8x16):
|
||||
@@ -487,17 +342,12 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: movz x0, #1
|
||||
; Inst 1: sub w0, wzr, w0
|
||||
; Inst 2: dup v1.16b, w0
|
||||
; Inst 3: ushl v0.16b, v0.16b, v1.16b
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x3, #1
|
||||
; sub w5, wzr, w3
|
||||
; dup v7.16b, w5
|
||||
; ushl v0.16b, v0.16b, v7.16b
|
||||
; ret
|
||||
|
||||
function %add_i128(i128, i128) -> i128 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -505,15 +355,10 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: adds x0, x0, x2
|
||||
; Inst 1: adc x1, x1, x3
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds x0, x0, x2
|
||||
; adc x1, x1, x3
|
||||
; ret
|
||||
|
||||
function %sub_i128(i128, i128) -> i128 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -521,15 +366,10 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs x0, x0, x2
|
||||
; Inst 1: sbc x1, x1, x3
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs x0, x0, x2
|
||||
; sbc x1, x1, x3
|
||||
; ret
|
||||
|
||||
function %mul_i128(i128, i128) -> i128 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -537,17 +377,12 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: umulh x4, x0, x2
|
||||
; Inst 1: madd x3, x0, x3, x4
|
||||
; Inst 2: madd x1, x1, x2, x3
|
||||
; Inst 3: madd x0, x0, x2, xzr
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umulh x10, x0, x2
|
||||
; madd x12, x0, x3, x10
|
||||
; madd x1, x1, x2, x12
|
||||
; madd x0, x0, x2, xzr
|
||||
; ret
|
||||
|
||||
function %add_mul_1(i32, i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i32):
|
||||
@@ -556,14 +391,9 @@ block0(v0: i32, v1: i32, v2: i32):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: madd w0, w1, w2, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; madd w0, w1, w2, w0
|
||||
; ret
|
||||
|
||||
function %add_mul_2(i32, i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i32):
|
||||
@@ -572,14 +402,9 @@ block0(v0: i32, v1: i32, v2: i32):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: madd w0, w1, w2, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; madd w0, w1, w2, w0
|
||||
; ret
|
||||
|
||||
function %srem_const (i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -588,16 +413,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: orr x1, xzr, #2
|
||||
; Inst 1: sdiv x2, x0, x1
|
||||
; Inst 2: msub x0, x2, x1, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x3, xzr, #2
|
||||
; sdiv x5, x0, x3
|
||||
; msub x0, x5, x3, x0
|
||||
; ret
|
||||
|
||||
function %urem_const (i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -606,16 +426,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: orr x1, xzr, #2
|
||||
; Inst 1: udiv x2, x0, x1
|
||||
; Inst 2: msub x0, x2, x1, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x3, xzr, #2
|
||||
; udiv x5, x0, x3
|
||||
; msub x0, x5, x3, x0
|
||||
; ret
|
||||
|
||||
function %sdiv_minus_one(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -624,16 +439,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: movn x1, #0
|
||||
; Inst 1: adds xzr, x1, #1
|
||||
; Inst 2: ccmp x0, #1, #nzcv, eq
|
||||
; Inst 3: b.vc 8 ; udf
|
||||
; Inst 4: sdiv x0, x0, x1
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x3, #0
|
||||
; adds xzr, x3, #1
|
||||
; ccmp x0, #1, #nzcv, eq
|
||||
; b.vc 8 ; udf
|
||||
; sdiv x0, x0, x3
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,14 +7,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldaddal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldaddal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_add_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -22,14 +17,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldaddal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldaddal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_add_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -37,14 +27,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldaddalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldaddalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_add_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -52,14 +37,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldaddalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldaddalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_and_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -67,14 +47,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldclral x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldclral x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_and_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -82,14 +57,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldclral w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldclral w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_and_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -97,14 +67,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldclralh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldclralh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_and_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -112,14 +77,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldclralb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldclralb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_nand_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -127,25 +87,21 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: str x28, [sp, #-16]!
|
||||
; Inst 3: stp x26, x27, [sp, #-16]!
|
||||
; Inst 4: stp x24, x25, [sp, #-16]!
|
||||
; Inst 5: mov x25, x0
|
||||
; Inst 6: mov x26, x1
|
||||
; Inst 7: 1: ldaxr x27, [x25]; and x28, x27, x26; mvn x28, x28; stlxr w24, x28, [x25]; cbnz w24, 1b
|
||||
; Inst 8: ldp x24, x25, [sp], #16
|
||||
; Inst 9: ldp x26, x27, [sp], #16
|
||||
; Inst 10: ldr x28, [sp], #16
|
||||
; Inst 11: ldp fp, lr, [sp], #16
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x28, [sp, #-16]!
|
||||
; stp x26, x27, [sp, #-16]!
|
||||
; stp x24, x25, [sp, #-16]!
|
||||
; block0:
|
||||
; mov x25, x0
|
||||
; mov x4, x1
|
||||
; mov x26, x4
|
||||
; 1: ldaxr x27, [x25]; and x28, x27, x26; mvn x28, x28; stlxr w24, x28, [x25]; cbnz w24, 1b
|
||||
; ldp x24, x25, [sp], #16
|
||||
; ldp x26, x27, [sp], #16
|
||||
; ldr x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_nand_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -153,25 +109,21 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: str x28, [sp, #-16]!
|
||||
; Inst 3: stp x26, x27, [sp, #-16]!
|
||||
; Inst 4: stp x24, x25, [sp, #-16]!
|
||||
; Inst 5: mov x25, x0
|
||||
; Inst 6: mov x26, x1
|
||||
; Inst 7: 1: ldaxr w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxr w24, w28, [x25]; cbnz w24, 1b
|
||||
; Inst 8: ldp x24, x25, [sp], #16
|
||||
; Inst 9: ldp x26, x27, [sp], #16
|
||||
; Inst 10: ldr x28, [sp], #16
|
||||
; Inst 11: ldp fp, lr, [sp], #16
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x28, [sp, #-16]!
|
||||
; stp x26, x27, [sp, #-16]!
|
||||
; stp x24, x25, [sp, #-16]!
|
||||
; block0:
|
||||
; mov x25, x0
|
||||
; mov x4, x1
|
||||
; mov x26, x4
|
||||
; 1: ldaxr w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxr w24, w28, [x25]; cbnz w24, 1b
|
||||
; ldp x24, x25, [sp], #16
|
||||
; ldp x26, x27, [sp], #16
|
||||
; ldr x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_nand_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -179,25 +131,21 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: str x28, [sp, #-16]!
|
||||
; Inst 3: stp x26, x27, [sp, #-16]!
|
||||
; Inst 4: stp x24, x25, [sp, #-16]!
|
||||
; Inst 5: mov x25, x0
|
||||
; Inst 6: mov x26, x1
|
||||
; Inst 7: 1: ldaxrh w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrh w24, w28, [x25]; cbnz w24, 1b
|
||||
; Inst 8: ldp x24, x25, [sp], #16
|
||||
; Inst 9: ldp x26, x27, [sp], #16
|
||||
; Inst 10: ldr x28, [sp], #16
|
||||
; Inst 11: ldp fp, lr, [sp], #16
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x28, [sp, #-16]!
|
||||
; stp x26, x27, [sp, #-16]!
|
||||
; stp x24, x25, [sp, #-16]!
|
||||
; block0:
|
||||
; mov x25, x0
|
||||
; mov x4, x1
|
||||
; mov x26, x4
|
||||
; 1: ldaxrh w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrh w24, w28, [x25]; cbnz w24, 1b
|
||||
; ldp x24, x25, [sp], #16
|
||||
; ldp x26, x27, [sp], #16
|
||||
; ldr x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_nand_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -205,25 +153,21 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: str x28, [sp, #-16]!
|
||||
; Inst 3: stp x26, x27, [sp, #-16]!
|
||||
; Inst 4: stp x24, x25, [sp, #-16]!
|
||||
; Inst 5: mov x25, x0
|
||||
; Inst 6: mov x26, x1
|
||||
; Inst 7: 1: ldaxrb w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrb w24, w28, [x25]; cbnz w24, 1b
|
||||
; Inst 8: ldp x24, x25, [sp], #16
|
||||
; Inst 9: ldp x26, x27, [sp], #16
|
||||
; Inst 10: ldr x28, [sp], #16
|
||||
; Inst 11: ldp fp, lr, [sp], #16
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x28, [sp, #-16]!
|
||||
; stp x26, x27, [sp, #-16]!
|
||||
; stp x24, x25, [sp, #-16]!
|
||||
; block0:
|
||||
; mov x25, x0
|
||||
; mov x4, x1
|
||||
; mov x26, x4
|
||||
; 1: ldaxrb w27, [x25]; and w28, w27, w26; mvn w28, w28; stlxrb w24, w28, [x25]; cbnz w24, 1b
|
||||
; ldp x24, x25, [sp], #16
|
||||
; ldp x26, x27, [sp], #16
|
||||
; ldr x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_or_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -231,14 +175,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsetal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsetal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_or_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -246,14 +185,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsetal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsetal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_or_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -261,14 +195,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsetalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsetalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_or_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -276,14 +205,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsetalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsetalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_xor_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -291,14 +215,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldeoral x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldeoral x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_xor_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -306,14 +225,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldeoral w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldeoral w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_xor_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -321,14 +235,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldeoralh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldeoralh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_xor_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -336,14 +245,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldeoralb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldeoralb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smax_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -351,14 +255,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsmaxal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsmaxal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smax_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -366,14 +265,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsmaxal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsmaxal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smax_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -381,14 +275,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsmaxalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsmaxalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smax_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -396,14 +285,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsmaxalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsmaxalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umax_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -411,14 +295,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldumaxal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldumaxal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umax_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -426,14 +305,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldumaxal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldumaxal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umax_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -441,14 +315,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldumaxalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldumaxalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umax_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -456,14 +325,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldumaxalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldumaxalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smin_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -471,14 +335,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsminal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsminal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smin_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -486,14 +345,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsminal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsminal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smin_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -501,14 +355,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsminalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsminalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_smin_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -516,14 +365,9 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldsminalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldsminalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umin_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -531,14 +375,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lduminal x1, x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lduminal x1, x4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umin_i32(i64, i32) {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -546,14 +385,9 @@ block0(v0: i64, v1: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lduminal w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lduminal w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umin_i16(i64, i16) {
|
||||
block0(v0: i64, v1: i16):
|
||||
@@ -561,14 +395,9 @@ block0(v0: i64, v1: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lduminalh w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lduminalh w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_rmw_umin_i8(i64, i8) {
|
||||
block0(v0: i64, v1: i8):
|
||||
@@ -576,12 +405,7 @@ block0(v0: i64, v1: i8):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lduminalb w1, w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lduminalb w1, w4, [x0]
|
||||
; ret
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,14 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldar x0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldar x0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -22,14 +17,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldar w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldar w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -37,14 +27,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarh w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarh w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i8(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
@@ -52,14 +37,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarb w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarb w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i32_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -68,14 +48,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldar w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldar w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i16_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -84,14 +59,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarh w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarh w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i8_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -100,14 +70,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarb w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarb w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i16_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -116,14 +81,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarh w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarh w0, [x0]
|
||||
; ret
|
||||
|
||||
function %atomic_load_i8_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -132,12 +92,7 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldarb w0, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldarb w0, [x0]
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,14 +7,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlr x0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlr x0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -22,14 +17,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlr w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlr w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -37,14 +27,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrh w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrh w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i8(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -52,14 +37,9 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrb w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrb w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i64_i32(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -68,14 +48,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlr w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlr w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i64_i16(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -84,14 +59,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrh w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrh w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i64_i8(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -100,14 +70,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrb w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrb w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i32_i16(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -116,14 +81,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrh w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrh w0, [x1]
|
||||
; ret
|
||||
|
||||
function %atomic_store_i32_i8(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -132,12 +92,7 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: stlrb w0, [x1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; stlrb w0, [x1]
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,12 +8,7 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, w1
|
||||
; ret
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,15 +9,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: blr x1
|
||||
; Inst 3: ldp fp, lr, [sp], #16
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; blr x1
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
set unwind_info=false
|
||||
set enable_probestack=false
|
||||
target aarch64
|
||||
@@ -11,12 +11,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: ldr x1, 8 ; b 12 ; data
|
||||
; nextln: blr x1
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f2(i32) -> i64 {
|
||||
fn0 = %g(i32 uext) -> i64 baldrdash_system_v
|
||||
@@ -26,20 +27,40 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; check: mov w0, w0
|
||||
; nextln: ldr x1, 8 ; b 12 ; data
|
||||
; nextln: blr x1
|
||||
; check: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; stp x27, x28, [sp, #-16]!
|
||||
; stp x25, x26, [sp, #-16]!
|
||||
; stp x23, x24, [sp, #-16]!
|
||||
; stp x21, x22, [sp, #-16]!
|
||||
; stp x19, x20, [sp, #-16]!
|
||||
; stp d14, d15, [sp, #-16]!
|
||||
; stp d12, d13, [sp, #-16]!
|
||||
; stp d10, d11, [sp, #-16]!
|
||||
; stp d8, d9, [sp, #-16]!
|
||||
; block0:
|
||||
; mov w0, w0
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; ldp d8, d9, [sp], #16
|
||||
; ldp d10, d11, [sp], #16
|
||||
; ldp d12, d13, [sp], #16
|
||||
; ldp d14, d15, [sp], #16
|
||||
; ldp x19, x20, [sp], #16
|
||||
; ldp x21, x22, [sp], #16
|
||||
; ldp x23, x24, [sp], #16
|
||||
; ldp x25, x26, [sp], #16
|
||||
; ldp x27, x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f3(i32) -> i32 uext baldrdash_system_v {
|
||||
block0(v0: i32):
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: mov w0, w0
|
||||
; block0:
|
||||
; mov w0, w0
|
||||
|
||||
function %f4(i32) -> i64 {
|
||||
fn0 = %g(i32 sext) -> i64 baldrdash_system_v
|
||||
@@ -49,20 +70,40 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; check: sxtw x0, w0
|
||||
; nextln: ldr x1, 8 ; b 12 ; data
|
||||
; nextln: blr x1
|
||||
; check: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; stp x27, x28, [sp, #-16]!
|
||||
; stp x25, x26, [sp, #-16]!
|
||||
; stp x23, x24, [sp, #-16]!
|
||||
; stp x21, x22, [sp, #-16]!
|
||||
; stp x19, x20, [sp, #-16]!
|
||||
; stp d14, d15, [sp, #-16]!
|
||||
; stp d12, d13, [sp, #-16]!
|
||||
; stp d10, d11, [sp, #-16]!
|
||||
; stp d8, d9, [sp, #-16]!
|
||||
; block0:
|
||||
; sxtw x0, w0
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; ldp d8, d9, [sp], #16
|
||||
; ldp d10, d11, [sp], #16
|
||||
; ldp d12, d13, [sp], #16
|
||||
; ldp d14, d15, [sp], #16
|
||||
; ldp x19, x20, [sp], #16
|
||||
; ldp x21, x22, [sp], #16
|
||||
; ldp x23, x24, [sp], #16
|
||||
; ldp x25, x26, [sp], #16
|
||||
; ldp x27, x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f5(i32) -> i32 sext baldrdash_system_v {
|
||||
block0(v0: i32):
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: sxtw x0, w0
|
||||
; block0:
|
||||
; sxtw x0, w0
|
||||
|
||||
function %f6(i8) -> i64 {
|
||||
fn0 = %g(i32, i32, i32, i32, i32, i32, i32, i32, i8 sext) -> i64
|
||||
@@ -73,26 +114,27 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: mov x8, x0
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust 16
|
||||
; nextln: movz x0, #42
|
||||
; nextln: movz x1, #42
|
||||
; nextln: movz x2, #42
|
||||
; nextln: movz x3, #42
|
||||
; nextln: movz x4, #42
|
||||
; nextln: movz x5, #42
|
||||
; nextln: movz x6, #42
|
||||
; nextln: movz x7, #42
|
||||
; nextln: sturb w8, [sp]
|
||||
; nextln: ldr x8, 8 ; b 12 ; data
|
||||
; nextln: blr x8
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust -16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; mov x15, x0
|
||||
; sub sp, sp, #16
|
||||
; virtual_sp_offset_adjust 16
|
||||
; movz x0, #42
|
||||
; movz x1, #42
|
||||
; movz x2, #42
|
||||
; movz x3, #42
|
||||
; movz x4, #42
|
||||
; movz x5, #42
|
||||
; movz x6, #42
|
||||
; movz x7, #42
|
||||
; strb w15, [sp]
|
||||
; ldr x15, 8 ; b 12 ; data TestCase { length: 1, ascii: [103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x15
|
||||
; add sp, sp, #16
|
||||
; virtual_sp_offset_adjust -16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f7(i8) -> i32, i32, i32, i32, i32, i32, i32, i32, i8 sext {
|
||||
block0(v0: i8):
|
||||
@@ -100,18 +142,19 @@ block0(v0: i8):
|
||||
return v1, v1, v1, v1, v1, v1, v1, v1, v0
|
||||
}
|
||||
|
||||
; check: mov x9, x0
|
||||
; nextln: mov x8, x1
|
||||
; nextln: movz x0, #42
|
||||
; nextln: movz x1, #42
|
||||
; nextln: movz x2, #42
|
||||
; nextln: movz x3, #42
|
||||
; nextln: movz x4, #42
|
||||
; nextln: movz x5, #42
|
||||
; nextln: movz x6, #42
|
||||
; nextln: movz x7, #42
|
||||
; nextln: sturb w9, [x8]
|
||||
; nextln: ret
|
||||
; block0:
|
||||
; mov x14, x0
|
||||
; mov x8, x1
|
||||
; movz x0, #42
|
||||
; movz x1, #42
|
||||
; movz x2, #42
|
||||
; movz x3, #42
|
||||
; movz x4, #42
|
||||
; movz x5, #42
|
||||
; movz x6, #42
|
||||
; movz x7, #42
|
||||
; strb w14, [x8]
|
||||
; ret
|
||||
|
||||
function %f8() {
|
||||
fn0 = %g0() -> f32
|
||||
@@ -131,32 +174,33 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #48
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: add sp, sp, #48
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #48
|
||||
; block0:
|
||||
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x9
|
||||
; str q0, [sp]
|
||||
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x11
|
||||
; str q0, [sp, #16]
|
||||
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x13
|
||||
; str q0, [sp, #32]
|
||||
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x15
|
||||
; ldr q0, [sp]
|
||||
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x1
|
||||
; ldr q0, [sp, #16]
|
||||
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x3
|
||||
; ldr q0, [sp, #32]
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; add sp, sp, #48
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f9() {
|
||||
fn0 = %g0() -> i8x16
|
||||
@@ -174,32 +218,33 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #48
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: add sp, sp, #48
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #48
|
||||
; block0:
|
||||
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x9
|
||||
; str q0, [sp]
|
||||
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x11
|
||||
; str q0, [sp, #16]
|
||||
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x13
|
||||
; str q0, [sp, #32]
|
||||
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x15
|
||||
; ldr q0, [sp]
|
||||
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x1
|
||||
; ldr q0, [sp, #16]
|
||||
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x3
|
||||
; ldr q0, [sp, #32]
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; add sp, sp, #48
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f10() {
|
||||
fn0 = %g0() -> f32
|
||||
@@ -221,44 +266,43 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #48
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: str q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #16]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: ldr q0, [sp, #32]
|
||||
; nextln: ldr x0, 8 ; b 12 ; data
|
||||
; nextln: blr x0
|
||||
; nextln: add sp, sp, #48
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #48
|
||||
; block0:
|
||||
; ldr x9, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x9
|
||||
; str q0, [sp]
|
||||
; ldr x11, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x11
|
||||
; str q0, [sp, #16]
|
||||
; ldr x13, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x13
|
||||
; str q0, [sp, #32]
|
||||
; ldr x15, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x15
|
||||
; ldr q0, [sp]
|
||||
; ldr x1, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x1
|
||||
; ldr q0, [sp, #16]
|
||||
; ldr x3, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x3
|
||||
; ldr q0, [sp, #32]
|
||||
; ldr x5, 8 ; b 12 ; data TestCase { length: 2, ascii: [103, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x5
|
||||
; add sp, sp, #48
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
; i128 tests
|
||||
function %f11(i128, i64) -> i64 {
|
||||
block0(v0: i128, v1: i64):
|
||||
v2, v3 = isplit v0
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: mov x0, x1
|
||||
; nextln: ret
|
||||
|
||||
; block0:
|
||||
; mov x0, x1
|
||||
; ret
|
||||
|
||||
function %f11_call(i64) -> i64 {
|
||||
fn0 = %f11(i128, i64) -> i64
|
||||
@@ -270,28 +314,27 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: mov x1, x0
|
||||
; nextln: movz x0, #42
|
||||
; nextln: movz x2, #42
|
||||
; nextln: ldr x3, 8 ; b 12 ; data
|
||||
; nextln: blr x3
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; mov x9, x0
|
||||
; movz x0, #42
|
||||
; mov x1, x9
|
||||
; movz x2, #42
|
||||
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x14
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
; The AArch64 ABI requires that the i128 argument be aligned
|
||||
; and to be passed in x2 and x3
|
||||
function %f12(i64, i128) -> i64 {
|
||||
block0(v0: i64, v1: i128):
|
||||
v2, v3 = isplit v1
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: mov x0, x2
|
||||
; nextln: ret
|
||||
|
||||
; block0:
|
||||
; mov x0, x2
|
||||
; ret
|
||||
|
||||
function %f12_call(i64) -> i64 {
|
||||
fn0 = %f12(i64, i128) -> i64
|
||||
@@ -303,29 +346,26 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz x3, #42
|
||||
; nextln: mov x2, x0
|
||||
; nextln: movz x0, #42
|
||||
; nextln: ldr x1, 8 ; b 12 ; data
|
||||
; nextln: blr x1
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; movz x3, #42
|
||||
; mov x2, x0
|
||||
; movz x0, #42
|
||||
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x14
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
|
||||
; The Apple AArch64 ABI allows the i128 argument to not be aligned
|
||||
; and to be passed in x1 and x2
|
||||
function %f13(i64, i128) -> i64 apple_aarch64 {
|
||||
block0(v0: i64, v1: i128):
|
||||
v2, v3 = isplit v1
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: mov x0, x1
|
||||
; nextln: ret
|
||||
|
||||
; block0:
|
||||
; mov x0, x1
|
||||
; ret
|
||||
|
||||
function %f13_call(i64) -> i64 apple_aarch64 {
|
||||
fn0 = %f13(i64, i128) -> i64 apple_aarch64
|
||||
@@ -337,31 +377,29 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz x2, #42
|
||||
; nextln: mov x1, x0
|
||||
; nextln: movz x0, #42
|
||||
; nextln: ldr x3, 8 ; b 12 ; data
|
||||
; nextln: blr x3
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; movz x2, #42
|
||||
; mov x1, x0
|
||||
; movz x0, #42
|
||||
; ldr x14, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x14
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
|
||||
; We only have 8 registers to pass data in
|
||||
; make sure we spill the last argument even though there is one slot available
|
||||
function %f14(i128, i128, i128, i64, i128) -> i128 {
|
||||
block0(v0: i128, v1: i128, v2: i128, v3: i64, v4: i128):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: ldur x0, [fp, #16]
|
||||
; nextln: ldur x1, [fp, #24]
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; ldr x0, [fp, #16]
|
||||
; ldr x1, [fp, #24]
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f14_call(i128, i64) -> i128 {
|
||||
fn0 = %f14(i128, i128, i128, i64, i128) -> i128
|
||||
@@ -371,50 +409,40 @@ block0(v0: i128, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; mov x14, x2
|
||||
; sub sp, sp, #16
|
||||
; virtual_sp_offset_adjust 16
|
||||
; mov x13, x0
|
||||
; mov x15, x1
|
||||
; mov x2, x13
|
||||
; mov x3, x15
|
||||
; mov x4, x13
|
||||
; mov x5, x15
|
||||
; mov x6, x14
|
||||
; str x13, [sp]
|
||||
; str x15, [sp, #8]
|
||||
; ldr x7, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x7
|
||||
; add sp, sp, #16
|
||||
; virtual_sp_offset_adjust -16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
; TODO: Some codegen optimization possible here with x0,x1 moving to x7,x8 and then moving back
|
||||
; nextln: mov x7, x0
|
||||
; nextln: mov x8, x1
|
||||
; nextln: mov x6, x2
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust 16
|
||||
; nextln: mov x0, x7
|
||||
; nextln: mov x1, x8
|
||||
; nextln: mov x2, x7
|
||||
; nextln: mov x3, x8
|
||||
; nextln: mov x4, x7
|
||||
; nextln: mov x5, x8
|
||||
; nextln: stur x7, [sp]
|
||||
; nextln: stur x8, [sp, #8]
|
||||
|
||||
; nextln: ldr x7, 8 ; b 12 ; data
|
||||
; nextln: blr x7
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust -16
|
||||
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
|
||||
|
||||
; We have one register slot available (Similar to %f14), however apple
|
||||
; allows us to start i128 on non even numbered registers (x7 in this case).
|
||||
;
|
||||
; It is unspecified if we can split the i128 into x7 + the stack.
|
||||
; In practice LLVM does not do this, so we are going to go with that.
|
||||
function %f15(i128, i128, i128, i64, i128) -> i128 apple_aarch64{
|
||||
block0(v0: i128, v1: i128, v2: i128, v3: i64, v4: i128):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: ldur x0, [fp, #16]
|
||||
; nextln: ldur x1, [fp, #24]
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; ldr x0, [fp, #16]
|
||||
; ldr x1, [fp, #24]
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f15_call(i128, i64) -> i128 apple_aarch64 {
|
||||
fn0 = %f15(i128, i128, i128, i64, i128) -> i128 apple_aarch64
|
||||
@@ -424,31 +452,27 @@ block0(v0: i128, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
|
||||
; nextln: mov x7, x0
|
||||
; nextln: mov x8, x1
|
||||
; nextln: mov x6, x2
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust 16
|
||||
; nextln: mov x0, x7
|
||||
; nextln: mov x1, x8
|
||||
; nextln: mov x2, x7
|
||||
; nextln: mov x3, x8
|
||||
; nextln: mov x4, x7
|
||||
; nextln: mov x5, x8
|
||||
; nextln: stur x7, [sp]
|
||||
; nextln: stur x8, [sp, #8]
|
||||
|
||||
; nextln: ldr x7, 8 ; b 12 ; data
|
||||
; nextln: blr x7
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: virtual_sp_offset_adjust -16
|
||||
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; block0:
|
||||
; mov x14, x2
|
||||
; sub sp, sp, #16
|
||||
; virtual_sp_offset_adjust 16
|
||||
; mov x13, x0
|
||||
; mov x15, x1
|
||||
; mov x2, x13
|
||||
; mov x3, x15
|
||||
; mov x4, x13
|
||||
; mov x5, x15
|
||||
; mov x6, x14
|
||||
; str x13, [sp]
|
||||
; str x15, [sp, #8]
|
||||
; ldr x7, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 49, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x7
|
||||
; add sp, sp, #16
|
||||
; virtual_sp_offset_adjust -16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f16() -> i32, i32 wasmtime_system_v {
|
||||
block0:
|
||||
@@ -457,9 +481,10 @@ block0:
|
||||
return v0, v1
|
||||
}
|
||||
|
||||
; check: mov x1, x0
|
||||
; nextln: movz x0, #0
|
||||
; nextln: movz x2, #1
|
||||
; nextln: stur w2, [x1]
|
||||
; nextln: ret
|
||||
; block0:
|
||||
; mov x11, x0
|
||||
; movz x0, #0
|
||||
; movz x7, #1
|
||||
; str w7, [x11]
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,14 +10,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmeq v0.16b, v0.16b, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmeq v0.16b, v0.16b, #0
|
||||
; ret
|
||||
|
||||
function %f1(i16x8) -> b16x8 {
|
||||
block0(v0: i16x8):
|
||||
@@ -27,14 +22,9 @@ block0(v0: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmeq v0.8h, v0.8h, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmeq v0.8h, v0.8h, #0
|
||||
; ret
|
||||
|
||||
function %f2(i32x4) -> b32x4 {
|
||||
block0(v0: i32x4):
|
||||
@@ -44,15 +34,10 @@ block0(v0: i32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: cmeq v0.4s, v0.4s, #0
|
||||
; Inst 1: mvn v0.16b, v0.16b
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmeq v3.4s, v0.4s, #0
|
||||
; mvn v0.16b, v3.16b
|
||||
; ret
|
||||
|
||||
function %f3(i64x2) -> b64x2 {
|
||||
block0(v0: i64x2):
|
||||
@@ -62,15 +47,10 @@ block0(v0: i64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: cmeq v0.2d, v0.2d, #0
|
||||
; Inst 1: mvn v0.16b, v0.16b
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmeq v3.2d, v0.2d, #0
|
||||
; mvn v0.16b, v3.16b
|
||||
; ret
|
||||
|
||||
function %f4(i8x16) -> b8x16 {
|
||||
block0(v0: i8x16):
|
||||
@@ -80,14 +60,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmle v0.16b, v0.16b, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmle v0.16b, v0.16b, #0
|
||||
; ret
|
||||
|
||||
function %f5(i16x8) -> b16x8 {
|
||||
block0(v0: i16x8):
|
||||
@@ -97,14 +72,9 @@ block0(v0: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmge v0.8h, v0.8h, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmge v0.8h, v0.8h, #0
|
||||
; ret
|
||||
|
||||
function %f6(i32x4) -> b32x4 {
|
||||
block0(v0: i32x4):
|
||||
@@ -114,14 +84,9 @@ block0(v0: i32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmge v0.4s, v0.4s, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmge v0.4s, v0.4s, #0
|
||||
; ret
|
||||
|
||||
function %f7(i64x2) -> b64x2 {
|
||||
block0(v0: i64x2):
|
||||
@@ -131,14 +96,9 @@ block0(v0: i64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmle v0.2d, v0.2d, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmle v0.2d, v0.2d, #0
|
||||
; ret
|
||||
|
||||
function %f8(i8x16) -> b8x16 {
|
||||
block0(v0: i8x16):
|
||||
@@ -148,14 +108,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmlt v0.16b, v0.16b, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmlt v0.16b, v0.16b, #0
|
||||
; ret
|
||||
|
||||
function %f9(i16x8) -> b16x8 {
|
||||
block0(v0: i16x8):
|
||||
@@ -165,14 +120,9 @@ block0(v0: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmgt v0.8h, v0.8h, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmgt v0.8h, v0.8h, #0
|
||||
; ret
|
||||
|
||||
function %f10(i32x4) -> b32x4 {
|
||||
block0(v0: i32x4):
|
||||
@@ -182,14 +132,9 @@ block0(v0: i32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmgt v0.4s, v0.4s, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmgt v0.4s, v0.4s, #0
|
||||
; ret
|
||||
|
||||
function %f11(i64x2) -> b64x2 {
|
||||
block0(v0: i64x2):
|
||||
@@ -199,14 +144,9 @@ block0(v0: i64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: cmlt v0.2d, v0.2d, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; cmlt v0.2d, v0.2d, #0
|
||||
; ret
|
||||
|
||||
function %f12(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -216,14 +156,9 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmeq v0.4s, v0.4s, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmeq v0.4s, v0.4s, #0.0
|
||||
; ret
|
||||
|
||||
function %f13(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -233,14 +168,9 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmeq v0.2d, v0.2d, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmeq v0.2d, v0.2d, #0.0
|
||||
; ret
|
||||
|
||||
function %f14(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -250,15 +180,10 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: fcmeq v0.2d, v0.2d, #0.0
|
||||
; Inst 1: mvn v0.16b, v0.16b
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmeq v3.2d, v0.2d, #0.0
|
||||
; mvn v0.16b, v3.16b
|
||||
; ret
|
||||
|
||||
function %f15(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -268,15 +193,10 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: fcmeq v0.4s, v0.4s, #0.0
|
||||
; Inst 1: mvn v0.16b, v0.16b
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmeq v3.4s, v0.4s, #0.0
|
||||
; mvn v0.16b, v3.16b
|
||||
; ret
|
||||
|
||||
function %f16(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -286,14 +206,9 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmle v0.4s, v0.4s, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmle v0.4s, v0.4s, #0.0
|
||||
; ret
|
||||
|
||||
function %f17(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -303,14 +218,9 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmge v0.2d, v0.2d, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmge v0.2d, v0.2d, #0.0
|
||||
; ret
|
||||
|
||||
function %f18(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -320,14 +230,9 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmge v0.2d, v0.2d, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmge v0.2d, v0.2d, #0.0
|
||||
; ret
|
||||
|
||||
function %f19(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -337,14 +242,9 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmle v0.4s, v0.4s, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmle v0.4s, v0.4s, #0.0
|
||||
; ret
|
||||
|
||||
function %f20(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -354,14 +254,9 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmlt v0.4s, v0.4s, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmlt v0.4s, v0.4s, #0.0
|
||||
; ret
|
||||
|
||||
function %f21(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -371,14 +266,9 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmgt v0.2d, v0.2d, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmgt v0.2d, v0.2d, #0.0
|
||||
; ret
|
||||
|
||||
function %f22(f64x2) -> b64x2 {
|
||||
block0(v0: f64x2):
|
||||
@@ -388,14 +278,9 @@ block0(v0: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmgt v0.2d, v0.2d, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmgt v0.2d, v0.2d, #0.0
|
||||
; ret
|
||||
|
||||
function %f23(f32x4) -> b32x4 {
|
||||
block0(v0: f32x4):
|
||||
@@ -405,11 +290,7 @@ block0(v0: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fcmlt v0.4s, v0.4s, #0.0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmlt v0.4s, v0.4s, #0.0
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,15 +8,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs xzr, x0, x1
|
||||
; Inst 1: cset x0, eq
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x1
|
||||
; cset x0, eq
|
||||
; ret
|
||||
|
||||
function %icmp_eq_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -24,17 +19,12 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: eor x0, x0, x2
|
||||
; Inst 1: eor x1, x1, x3
|
||||
; Inst 2: adds xzr, x0, x1
|
||||
; Inst 3: cset x0, eq
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eor x10, x0, x2
|
||||
; eor x12, x1, x3
|
||||
; adds xzr, x10, x12
|
||||
; cset x0, eq
|
||||
; ret
|
||||
|
||||
function %icmp_ne_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -42,17 +32,12 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: eor x0, x0, x2
|
||||
; Inst 1: eor x1, x1, x3
|
||||
; Inst 2: adds xzr, x0, x1
|
||||
; Inst 3: cset x0, ne
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eor x10, x0, x2
|
||||
; eor x12, x1, x3
|
||||
; adds xzr, x10, x12
|
||||
; cset x0, ne
|
||||
; ret
|
||||
|
||||
function %icmp_slt_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -60,18 +45,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, lo
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, lt
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, lo
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, lt
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_ult_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -79,18 +59,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, lo
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, lo
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, lo
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, lo
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_sle_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -98,18 +73,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, ls
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, le
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, ls
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, le
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_ule_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -117,18 +87,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, ls
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, ls
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, ls
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, ls
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_sgt_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -136,18 +101,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hi
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, gt
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, hi
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, gt
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_ugt_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -155,18 +115,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hi
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, hi
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, hi
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, hi
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_sge_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -174,18 +129,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hs
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, ge
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, hs
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, ge
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_uge_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -193,18 +143,13 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hs
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, hs
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x11, hs
|
||||
; subs xzr, x1, x3
|
||||
; cset x14, hs
|
||||
; csel x0, x11, x14, eq
|
||||
; ret
|
||||
|
||||
function %icmp_of_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -212,16 +157,11 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: adds xzr, x0, x2
|
||||
; Inst 1: adcs xzr, x1, x3
|
||||
; Inst 2: cset x0, vs
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds xzr, x0, x2
|
||||
; adcs xzr, x1, x3
|
||||
; cset x0, vs
|
||||
; ret
|
||||
|
||||
function %icmp_nof_i128(i128, i128) -> b1 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -229,16 +169,11 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: adds xzr, x0, x2
|
||||
; Inst 1: adcs xzr, x1, x3
|
||||
; Inst 2: cset x0, vc
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds xzr, x0, x2
|
||||
; adcs xzr, x1, x3
|
||||
; cset x0, vc
|
||||
; ret
|
||||
|
||||
function %f(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -255,26 +190,15 @@ block2:
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: subs xzr, x0, x1
|
||||
; Inst 1: b.eq label1 ; b label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 2 .. 4)
|
||||
; Inst 2: movz x0, #1
|
||||
; Inst 3: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 4 .. 6)
|
||||
; Inst 4: movz x0, #2
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x1
|
||||
; b.eq label1 ; b label2
|
||||
; block1:
|
||||
; movz x0, #1
|
||||
; ret
|
||||
; block2:
|
||||
; movz x0, #2
|
||||
; ret
|
||||
|
||||
function %f(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -287,29 +211,16 @@ block1:
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: subs xzr, x0, x1
|
||||
; Inst 1: b.eq label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 2 .. 3)
|
||||
; Inst 2: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 3 .. 4)
|
||||
; Inst 3: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 6)
|
||||
; Inst 4: movz x0, #1
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x1
|
||||
; b.eq label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; movz x0, #1
|
||||
; ret
|
||||
|
||||
function %i128_brz(i128){
|
||||
block0(v0: i128):
|
||||
@@ -321,28 +232,15 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orr x0, x0, x1
|
||||
; Inst 1: cbz x0, label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 2 .. 3)
|
||||
; Inst 2: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 3 .. 4)
|
||||
; Inst 3: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x4, x0, x1
|
||||
; cbz x4, label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_brnz(i128){
|
||||
block0(v0: i128):
|
||||
@@ -354,28 +252,15 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orr x0, x0, x1
|
||||
; Inst 1: cbnz x0, label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 2 .. 3)
|
||||
; Inst 2: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 3 .. 4)
|
||||
; Inst 3: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x4, x0, x1
|
||||
; cbnz x4, label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_eq(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -386,30 +271,17 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: eor x0, x0, x2
|
||||
; Inst 1: eor x1, x1, x3
|
||||
; Inst 2: adds xzr, x0, x1
|
||||
; Inst 3: b.eq label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 5 .. 6)
|
||||
; Inst 5: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 6 .. 7)
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eor x8, x0, x2
|
||||
; eor x10, x1, x3
|
||||
; adds xzr, x8, x10
|
||||
; b.eq label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_ne(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -420,30 +292,17 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: eor x0, x0, x2
|
||||
; Inst 1: eor x1, x1, x3
|
||||
; Inst 2: adds xzr, x0, x1
|
||||
; Inst 3: b.ne label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 5 .. 6)
|
||||
; Inst 5: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 6 .. 7)
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; block0:
|
||||
; eor x8, x0, x2
|
||||
; eor x10, x1, x3
|
||||
; adds xzr, x8, x10
|
||||
; b.ne label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_slt(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -454,33 +313,20 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, lo
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, lt
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: subs xzr, xzr, x0
|
||||
; Inst 6: b.lt label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 7 .. 8)
|
||||
; Inst 7: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, lo
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, lt
|
||||
; csel x9, x9, x12, eq
|
||||
; subs xzr, xzr, x9
|
||||
; b.lt label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_ult(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -491,33 +337,20 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, lo
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, lo
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: subs xzr, xzr, x0
|
||||
; Inst 6: b.lo label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 7 .. 8)
|
||||
; Inst 7: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, lo
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, lo
|
||||
; csel x9, x9, x12, eq
|
||||
; subs xzr, xzr, x9
|
||||
; b.lo label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_sle(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -528,34 +361,21 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, ls
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, le
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: movz x1, #1
|
||||
; Inst 6: subs xzr, x1, x0
|
||||
; Inst 7: b.le label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 10 .. 11)
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, ls
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, le
|
||||
; csel x9, x9, x12, eq
|
||||
; movz x12, #1
|
||||
; subs xzr, x12, x9
|
||||
; b.le label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_ule(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -566,34 +386,21 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, ls
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, ls
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: movz x1, #1
|
||||
; Inst 6: subs xzr, x1, x0
|
||||
; Inst 7: b.ls label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 10 .. 11)
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, ls
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, ls
|
||||
; csel x9, x9, x12, eq
|
||||
; movz x12, #1
|
||||
; subs xzr, x12, x9
|
||||
; b.ls label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_sgt(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -604,33 +411,20 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hi
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, gt
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: subs xzr, x0, xzr
|
||||
; Inst 6: b.gt label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 7 .. 8)
|
||||
; Inst 7: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, hi
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, gt
|
||||
; csel x9, x9, x12, eq
|
||||
; subs xzr, x9, xzr
|
||||
; b.gt label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_ugt(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -641,33 +435,20 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hi
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, hi
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: subs xzr, x0, xzr
|
||||
; Inst 6: b.hi label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 7 .. 8)
|
||||
; Inst 7: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, hi
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, hi
|
||||
; csel x9, x9, x12, eq
|
||||
; subs xzr, x9, xzr
|
||||
; b.hi label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_sge(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -678,34 +459,21 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hs
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, ge
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: movz x1, #1
|
||||
; Inst 6: subs xzr, x0, x1
|
||||
; Inst 7: b.ge label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 10 .. 11)
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, hs
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, ge
|
||||
; csel x9, x9, x12, eq
|
||||
; movz x12, #1
|
||||
; subs xzr, x9, x12
|
||||
; b.ge label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_uge(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -716,34 +484,21 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: subs xzr, x0, x2
|
||||
; Inst 1: cset x0, hs
|
||||
; Inst 2: subs xzr, x1, x3
|
||||
; Inst 3: cset x1, hs
|
||||
; Inst 4: csel x0, x0, x1, eq
|
||||
; Inst 5: movz x1, #1
|
||||
; Inst 6: subs xzr, x0, x1
|
||||
; Inst 7: b.hs label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 9 .. 10)
|
||||
; Inst 9: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 10 .. 11)
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, x2
|
||||
; cset x9, hs
|
||||
; subs xzr, x1, x3
|
||||
; cset x12, hs
|
||||
; csel x9, x9, x12, eq
|
||||
; movz x12, #1
|
||||
; subs xzr, x9, x12
|
||||
; b.hs label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_of(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -754,29 +509,16 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: adds xzr, x0, x2
|
||||
; Inst 1: adcs xzr, x1, x3
|
||||
; Inst 2: b.vs label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 3 .. 4)
|
||||
; Inst 3: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 5 .. 6)
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds xzr, x0, x2
|
||||
; adcs xzr, x1, x3
|
||||
; b.vs label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
function %i128_bricmp_nof(i128, i128) {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -787,27 +529,14 @@ block1:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: adds xzr, x0, x2
|
||||
; Inst 1: adcs xzr, x1, x3
|
||||
; Inst 2: b.vc label1 ; b label2
|
||||
; Block 1:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 3 .. 4)
|
||||
; Inst 3: b label3
|
||||
; Block 2:
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 4 .. 5)
|
||||
; Inst 4: b label3
|
||||
; Block 3:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 5 .. 6)
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds xzr, x0, x2
|
||||
; adcs xzr, x1, x3
|
||||
; b.vc label1 ; b label2
|
||||
; block1:
|
||||
; b label3
|
||||
; block2:
|
||||
; b label3
|
||||
; block3:
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,16 +10,11 @@ block0(v0: i8, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: subs wzr, w0, #42
|
||||
; Inst 2: csel x0, x1, x2, eq
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w8, w0
|
||||
; subs wzr, w8, #42
|
||||
; csel x0, x1, x2, eq
|
||||
; ret
|
||||
|
||||
function %g(i8) -> b1 {
|
||||
block0(v0: i8):
|
||||
@@ -29,16 +24,11 @@ block0(v0: i8):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: subs wzr, w0, #42
|
||||
; Inst 2: cset x0, eq
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w4, w0
|
||||
; subs wzr, w4, #42
|
||||
; cset x0, eq
|
||||
; ret
|
||||
|
||||
function %h(i8, i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8, v2: i8):
|
||||
@@ -46,16 +36,11 @@ block0(v0: i8, v1: i8, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: and x1, x1, x0
|
||||
; Inst 1: bic x0, x2, x0
|
||||
; Inst 2: orr x0, x0, x1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and x8, x1, x0
|
||||
; bic x0, x2, x0
|
||||
; orr x0, x0, x8
|
||||
; ret
|
||||
|
||||
function %i(b1, i8, i8) -> i8 {
|
||||
block0(v0: b1, v1: i8, v2: i8):
|
||||
@@ -63,16 +48,11 @@ block0(v0: b1, v1: i8, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: and w0, w0, #1
|
||||
; Inst 1: subs wzr, w0, wzr
|
||||
; Inst 2: csel x0, x1, x2, ne
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and w8, w0, #1
|
||||
; subs wzr, w8, wzr
|
||||
; csel x0, x1, x2, ne
|
||||
; ret
|
||||
|
||||
function %i(i32, i8, i8) -> i8 {
|
||||
block0(v0: i32, v1: i8, v2: i8):
|
||||
@@ -82,15 +62,10 @@ block0(v0: i32, v1: i8, v2: i8):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs wzr, w0, #42
|
||||
; Inst 1: csel x0, x1, x2, eq
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs wzr, w0, #42
|
||||
; csel x0, x1, x2, eq
|
||||
; ret
|
||||
|
||||
function %i128_select(b1, i128, i128) -> i128 {
|
||||
block0(v0: b1, v1: i128, v2: i128):
|
||||
@@ -98,15 +73,10 @@ block0(v0: b1, v1: i128, v2: i128):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: and w0, w0, #1
|
||||
; Inst 1: subs wzr, w0, wzr
|
||||
; Inst 2: csel x0, x2, x4, ne
|
||||
; Inst 3: csel x1, x3, x5, ne
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and w14, w0, #1
|
||||
; subs wzr, w14, wzr
|
||||
; csel x0, x2, x4, ne
|
||||
; csel x1, x3, x5, ne
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,14 +8,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #255
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #255
|
||||
; ret
|
||||
|
||||
function %f() -> b16 {
|
||||
block0:
|
||||
@@ -23,14 +18,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #0
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -38,14 +28,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #0
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -53,14 +38,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #65535
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #65535
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -68,14 +48,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #65535, LSL #16
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #65535, LSL #16
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -83,14 +58,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #65535, LSL #32
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #65535, LSL #32
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -98,14 +68,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #65535, LSL #48
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #65535, LSL #48
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -113,14 +78,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #0
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -128,14 +88,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #65535
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #65535
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -143,14 +98,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #65535, LSL #16
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #65535, LSL #16
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -158,14 +108,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #65535, LSL #32
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #65535, LSL #32
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -173,14 +118,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #65535, LSL #48
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #65535, LSL #48
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -188,17 +128,12 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: movz x0, #58
|
||||
; Inst 1: movk x0, #4626, LSL #16
|
||||
; Inst 2: movk x0, #61603, LSL #32
|
||||
; Inst 3: movk x0, #62283, LSL #48
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #58
|
||||
; movk x0, #4626, LSL #16
|
||||
; movk x0, #61603, LSL #32
|
||||
; movk x0, #62283, LSL #48
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -206,15 +141,10 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #7924, LSL #16
|
||||
; Inst 1: movk x0, #4841, LSL #48
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #7924, LSL #16
|
||||
; movk x0, #4841, LSL #48
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -222,15 +152,10 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movn x0, #57611, LSL #16
|
||||
; Inst 1: movk x0, #4841, LSL #48
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #57611, LSL #16
|
||||
; movk x0, #4841, LSL #48
|
||||
; ret
|
||||
|
||||
function %f() -> i32 {
|
||||
block0:
|
||||
@@ -238,14 +163,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: orr x0, xzr, #4294967295
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x0, xzr, #4294967295
|
||||
; ret
|
||||
|
||||
function %f() -> i32 {
|
||||
block0:
|
||||
@@ -253,14 +173,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn w0, #8
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn w0, #8
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -268,14 +183,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn w0, #8
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn w0, #8
|
||||
; ret
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -283,14 +193,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movn x0, #8
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movn x0, #8
|
||||
; ret
|
||||
|
||||
function %f() -> f64 {
|
||||
block0:
|
||||
@@ -298,14 +203,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fmov d0, #1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fmov d0, #1
|
||||
; ret
|
||||
|
||||
function %f() -> f32 {
|
||||
block0:
|
||||
@@ -313,14 +213,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fmov s0, #5
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fmov s0, #5
|
||||
; ret
|
||||
|
||||
function %f() -> f64 {
|
||||
block0:
|
||||
@@ -328,15 +223,10 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #16457, LSL #48
|
||||
; Inst 1: fmov d0, x0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #16457, LSL #48
|
||||
; fmov d0, x2
|
||||
; ret
|
||||
|
||||
function %f() -> f32 {
|
||||
block0:
|
||||
@@ -344,15 +234,10 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #16968, LSL #16
|
||||
; Inst 1: fmov s0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #16968, LSL #16
|
||||
; fmov s0, w2
|
||||
; ret
|
||||
|
||||
function %f() -> f64 {
|
||||
block0:
|
||||
@@ -360,14 +245,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movi v0.2s, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movi v0.2s, #0
|
||||
; ret
|
||||
|
||||
function %f() -> f32 {
|
||||
block0:
|
||||
@@ -375,14 +255,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movi v0.2s, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movi v0.2s, #0
|
||||
; ret
|
||||
|
||||
function %f() -> f64 {
|
||||
block0:
|
||||
@@ -390,14 +265,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fmov d0, #-16
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fmov d0, #-16
|
||||
; ret
|
||||
|
||||
function %f() -> f32 {
|
||||
block0:
|
||||
@@ -405,11 +275,7 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fmov s0, #-16
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fmov s0, #-16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,15 +10,10 @@ block0(v0: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxtb x0, w0
|
||||
; Inst 1: add x0, x0, #42
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb x4, w0
|
||||
; add x0, x4, #42
|
||||
; ret
|
||||
|
||||
function %f2(i8, i64) -> i64 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -27,14 +22,9 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add x0, x1, x0, SXTB
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x1, x0, SXTB
|
||||
; ret
|
||||
|
||||
function %i128_uextend_i64(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -42,14 +32,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x1, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i128_sextend_i64(i64) -> i128 {
|
||||
block0(v0: i64):
|
||||
@@ -57,14 +42,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: asr x1, x0, #63
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i128_uextend_i32(i32) -> i128 {
|
||||
block0(v0: i32):
|
||||
@@ -72,15 +52,10 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w0, w0
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i128_sextend_i32(i32) -> i128 {
|
||||
block0(v0: i32):
|
||||
@@ -88,15 +63,10 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x0, w0
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i128_uextend_i16(i16) -> i128 {
|
||||
block0(v0: i16):
|
||||
@@ -104,15 +74,10 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w0, w0
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i128_sextend_i16(i16) -> i128 {
|
||||
block0(v0: i16):
|
||||
@@ -120,15 +85,10 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxth x0, w0
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxth x0, w0
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i128_uextend_i8(i8) -> i128 {
|
||||
block0(v0: i8):
|
||||
@@ -136,15 +96,10 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w0, w0
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i128_sextend_i8(i8) -> i128 {
|
||||
block0(v0: i8):
|
||||
@@ -152,15 +107,10 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sxtb x0, w0
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb x0, w0
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i8x16_uextend_i16(i8x16) -> i16 {
|
||||
block0(v0: i8x16):
|
||||
@@ -169,14 +119,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umov w0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_uextend_i32(i8x16) -> i32 {
|
||||
block0(v0: i8x16):
|
||||
@@ -185,14 +130,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umov w0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_uextend_i64(i8x16) -> i64 {
|
||||
block0(v0: i8x16):
|
||||
@@ -201,14 +141,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umov w0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_uextend_i128(i8x16) -> i128 {
|
||||
block0(v0: i8x16):
|
||||
@@ -217,15 +152,10 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: umov w0, v0.b[1]
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.b[1]
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i8x16_sextend_i16(i8x16) -> i16 {
|
||||
block0(v0: i8x16):
|
||||
@@ -234,14 +164,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov w0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov w0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_sextend_i32(i8x16) -> i32 {
|
||||
block0(v0: i8x16):
|
||||
@@ -250,14 +175,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov w0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov w0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_sextend_i64(i8x16) -> i64 {
|
||||
block0(v0: i8x16):
|
||||
@@ -266,14 +186,9 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov x0, v0.b[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.b[1]
|
||||
; ret
|
||||
|
||||
function %i8x16_sextend_i128(i8x16) -> i128 {
|
||||
block0(v0: i8x16):
|
||||
@@ -282,15 +197,10 @@ block0(v0: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: smov x0, v0.b[1]
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.b[1]
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i16x8_uextend_i32(i16x8) -> i32 {
|
||||
block0(v0: i16x8):
|
||||
@@ -299,14 +209,9 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umov w0, v0.h[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.h[1]
|
||||
; ret
|
||||
|
||||
function %i16x8_uextend_i64(i16x8) -> i64 {
|
||||
block0(v0: i16x8):
|
||||
@@ -315,14 +220,9 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umov w0, v0.h[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.h[1]
|
||||
; ret
|
||||
|
||||
function %i16x8_uextend_i128(i16x8) -> i128 {
|
||||
block0(v0: i16x8):
|
||||
@@ -331,15 +231,10 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: umov w0, v0.h[1]
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umov w0, v0.h[1]
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i16x8_sextend_i32(i16x8) -> i32 {
|
||||
block0(v0: i16x8):
|
||||
@@ -348,14 +243,9 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov w0, v0.h[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov w0, v0.h[1]
|
||||
; ret
|
||||
|
||||
function %i16x8_sextend_i64(i16x8) -> i64 {
|
||||
block0(v0: i16x8):
|
||||
@@ -364,14 +254,9 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov x0, v0.h[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.h[1]
|
||||
; ret
|
||||
|
||||
function %i16x8_sextend_i128(i16x8) -> i128 {
|
||||
block0(v0: i16x8):
|
||||
@@ -380,15 +265,10 @@ block0(v0: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: smov x0, v0.h[1]
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.h[1]
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i32x4_uextend_i64(i32x4) -> i64 {
|
||||
block0(v0: i32x4):
|
||||
@@ -397,14 +277,9 @@ block0(v0: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: mov w0, v0.s[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w0, v0.s[1]
|
||||
; ret
|
||||
|
||||
function %i32x4_uextend_i128(i32x4) -> i128 {
|
||||
block0(v0: i32x4):
|
||||
@@ -413,15 +288,10 @@ block0(v0: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov w0, v0.s[1]
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w0, v0.s[1]
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i32x4_sextend_i64(i32x4) -> i64 {
|
||||
block0(v0: i32x4):
|
||||
@@ -430,14 +300,9 @@ block0(v0: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smov x0, v0.s[1]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.s[1]
|
||||
; ret
|
||||
|
||||
function %i32x4_sextend_i128(i32x4) -> i128 {
|
||||
block0(v0: i32x4):
|
||||
@@ -446,15 +311,10 @@ block0(v0: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: smov x0, v0.s[1]
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smov x0, v0.s[1]
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
function %i64x2_uextend_i128(i64x2) -> i128 {
|
||||
block0(v0: i64x2):
|
||||
@@ -463,15 +323,10 @@ block0(v0: i64x2):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov x0, v0.d[1]
|
||||
; Inst 1: movz x1, #0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x0, v0.d[1]
|
||||
; movz x1, #0
|
||||
; ret
|
||||
|
||||
function %i64x2_sextend_i128(i64x2) -> i128 {
|
||||
block0(v0: i64x2):
|
||||
@@ -480,13 +335,8 @@ block0(v0: i64x2):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov x0, v0.d[1]
|
||||
; Inst 1: asr x1, x0, #63
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov x0, v0.d[1]
|
||||
; asr x1, x0, #63
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,15 +8,10 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: ucvtf s0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w4, w0
|
||||
; ucvtf s0, w4
|
||||
; ret
|
||||
|
||||
function u0:0(i8) -> f64 {
|
||||
block0(v0: i8):
|
||||
@@ -24,15 +19,10 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: ucvtf d0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w4, w0
|
||||
; ucvtf d0, w4
|
||||
; ret
|
||||
|
||||
function u0:0(i16) -> f32 {
|
||||
block0(v0: i16):
|
||||
@@ -40,15 +30,10 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: ucvtf s0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w4, w0
|
||||
; ucvtf s0, w4
|
||||
; ret
|
||||
|
||||
function u0:0(i16) -> f64 {
|
||||
block0(v0: i16):
|
||||
@@ -56,15 +41,10 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: ucvtf d0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w4, w0
|
||||
; ucvtf d0, w4
|
||||
; ret
|
||||
|
||||
function u0:0(f32) -> i8 {
|
||||
block0(v0: f32):
|
||||
@@ -72,23 +52,18 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: fcmp s0, s0
|
||||
; Inst 1: b.vc 8 ; udf
|
||||
; Inst 2: fmov s1, #-1
|
||||
; Inst 3: fcmp s0, s1
|
||||
; Inst 4: b.gt 8 ; udf
|
||||
; Inst 5: movz x0, #17280, LSL #16
|
||||
; Inst 6: fmov s1, w0
|
||||
; Inst 7: fcmp s0, s1
|
||||
; Inst 8: b.mi 8 ; udf
|
||||
; Inst 9: fcvtzu w0, s0
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; fmov s6, #-1
|
||||
; fcmp s0, s6
|
||||
; b.gt 8 ; udf
|
||||
; movz x10, #17280, LSL #16
|
||||
; fmov s6, w10
|
||||
; fcmp s0, s6
|
||||
; b.mi 8 ; udf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
|
||||
function u0:0(f64) -> i8 {
|
||||
block0(v0: f64):
|
||||
@@ -96,23 +71,18 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: fcmp d0, d0
|
||||
; Inst 1: b.vc 8 ; udf
|
||||
; Inst 2: fmov d1, #-1
|
||||
; Inst 3: fcmp d0, d1
|
||||
; Inst 4: b.gt 8 ; udf
|
||||
; Inst 5: movz x0, #16496, LSL #48
|
||||
; Inst 6: fmov d1, x0
|
||||
; Inst 7: fcmp d0, d1
|
||||
; Inst 8: b.mi 8 ; udf
|
||||
; Inst 9: fcvtzu w0, d0
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; fmov d6, #-1
|
||||
; fcmp d0, d6
|
||||
; b.gt 8 ; udf
|
||||
; movz x10, #16496, LSL #48
|
||||
; fmov d6, x10
|
||||
; fcmp d0, d6
|
||||
; b.mi 8 ; udf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
|
||||
function u0:0(f32) -> i16 {
|
||||
block0(v0: f32):
|
||||
@@ -120,23 +90,18 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: fcmp s0, s0
|
||||
; Inst 1: b.vc 8 ; udf
|
||||
; Inst 2: fmov s1, #-1
|
||||
; Inst 3: fcmp s0, s1
|
||||
; Inst 4: b.gt 8 ; udf
|
||||
; Inst 5: movz x0, #18304, LSL #16
|
||||
; Inst 6: fmov s1, w0
|
||||
; Inst 7: fcmp s0, s1
|
||||
; Inst 8: b.mi 8 ; udf
|
||||
; Inst 9: fcvtzu w0, s0
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmp s0, s0
|
||||
; b.vc 8 ; udf
|
||||
; fmov s6, #-1
|
||||
; fcmp s0, s6
|
||||
; b.gt 8 ; udf
|
||||
; movz x10, #18304, LSL #16
|
||||
; fmov s6, w10
|
||||
; fcmp s0, s6
|
||||
; b.mi 8 ; udf
|
||||
; fcvtzu w0, s0
|
||||
; ret
|
||||
|
||||
function u0:0(f64) -> i16 {
|
||||
block0(v0: f64):
|
||||
@@ -144,21 +109,16 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: fcmp d0, d0
|
||||
; Inst 1: b.vc 8 ; udf
|
||||
; Inst 2: fmov d1, #-1
|
||||
; Inst 3: fcmp d0, d1
|
||||
; Inst 4: b.gt 8 ; udf
|
||||
; Inst 5: movz x0, #16624, LSL #48
|
||||
; Inst 6: fmov d1, x0
|
||||
; Inst 7: fcmp d0, d1
|
||||
; Inst 8: b.mi 8 ; udf
|
||||
; Inst 9: fcvtzu w0, d0
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fcmp d0, d0
|
||||
; b.vc 8 ; udf
|
||||
; fmov d6, #-1
|
||||
; fcmp d0, d6
|
||||
; b.gt 8 ; udf
|
||||
; movz x10, #16624, LSL #48
|
||||
; fmov d6, x10
|
||||
; fcmp d0, d6
|
||||
; b.mi 8 ; udf
|
||||
; fcvtzu w0, d0
|
||||
; ret
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,31 +13,20 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: mov w2, w1
|
||||
; Inst 1: ldr x3, [x0]
|
||||
; Inst 2: mov x3, x3
|
||||
; Inst 3: subs xzr, x2, x3
|
||||
; Inst 4: b.ls label1 ; b label2
|
||||
; Block 1:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 5 .. 10)
|
||||
; Inst 5: add x0, x0, x1, UXTW
|
||||
; Inst 6: subs xzr, x2, x3
|
||||
; Inst 7: movz x1, #0
|
||||
; Inst 8: csel x0, x1, x0, hi
|
||||
; Inst 9: ret
|
||||
; Block 2:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 10 .. 11)
|
||||
; Inst 10: udf
|
||||
; }}
|
||||
; block0:
|
||||
; mov w10, w1
|
||||
; ldr x5, [x0]
|
||||
; mov x11, x5
|
||||
; subs xzr, x10, x11
|
||||
; b.ls label1 ; b label2
|
||||
; block1:
|
||||
; add x13, x0, x1, UXTW
|
||||
; subs xzr, x10, x11
|
||||
; movz x14, #0
|
||||
; csel x0, x14, x13, hi
|
||||
; ret
|
||||
; block2:
|
||||
; udf
|
||||
|
||||
function %static_heap_check(i64 vmctx, i32) -> i64 {
|
||||
gv0 = vmctx
|
||||
@@ -48,27 +37,16 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: mov w2, w1
|
||||
; Inst 1: subs xzr, x2, #65536
|
||||
; Inst 2: b.ls label1 ; b label2
|
||||
; Block 1:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 3 .. 8)
|
||||
; Inst 3: add x0, x0, x1, UXTW
|
||||
; Inst 4: subs xzr, x2, #65536
|
||||
; Inst 5: movz x1, #0
|
||||
; Inst 6: csel x0, x1, x0, hi
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 8 .. 9)
|
||||
; Inst 8: udf
|
||||
; }}
|
||||
; block0:
|
||||
; mov w8, w1
|
||||
; subs xzr, x8, #65536
|
||||
; b.ls label1 ; b label2
|
||||
; block1:
|
||||
; add x10, x0, x1, UXTW
|
||||
; subs xzr, x8, #65536
|
||||
; movz x11, #0
|
||||
; csel x0, x11, x10, hi
|
||||
; ret
|
||||
; block2:
|
||||
; udf
|
||||
|
||||
|
||||
@@ -14,17 +14,12 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: movz x0, #56780
|
||||
; Inst 1: uxth w0, w0
|
||||
; Inst 2: movz x1, #56780
|
||||
; Inst 3: subs wzr, w0, w1, UXTH
|
||||
; Inst 4: cset x0, ne
|
||||
; Inst 5: and w0, w0, #1
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x3, #56780
|
||||
; uxth w5, w3
|
||||
; movz x7, #56780
|
||||
; subs wzr, w5, w7, UXTH
|
||||
; cset x4, ne
|
||||
; and w0, w4, #1
|
||||
; ret
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
set unwind_info=false
|
||||
target aarch64
|
||||
|
||||
@@ -29,16 +29,31 @@ block5(v5: i64):
|
||||
return v6
|
||||
}
|
||||
|
||||
; check: subs wzr, w0, #3
|
||||
; nextln: b.hs label1 ; adr x1, pc+16 ; ldrsw x2, [x1, x0, LSL 2] ; add x1, x1, x2 ; br x1 ; jt_entries
|
||||
|
||||
; check: movz x1, #1
|
||||
; nextln: b
|
||||
|
||||
; check: movz x1, #2
|
||||
; nextln: b
|
||||
|
||||
; check: movz x1, #3
|
||||
|
||||
; check: add x0, x0, x1
|
||||
; block0:
|
||||
; emit_island 36
|
||||
; subs wzr, w0, #3
|
||||
; b.hs label1 ; adr x15, pc+16 ; ldrsw x1, [x15, x0, LSL 2] ; add x15, x15, x1 ; br x15 ; jt_entries [Label(MachLabel(3)), Label(MachLabel(5)), Label(MachLabel(7))]
|
||||
; block1:
|
||||
; movz x5, #4
|
||||
; b label2
|
||||
; block2:
|
||||
; b label9
|
||||
; block3:
|
||||
; movz x5, #1
|
||||
; b label4
|
||||
; block4:
|
||||
; b label9
|
||||
; block5:
|
||||
; movz x5, #2
|
||||
; b label6
|
||||
; block6:
|
||||
; b label9
|
||||
; block7:
|
||||
; movz x5, #3
|
||||
; b label8
|
||||
; block8:
|
||||
; b label9
|
||||
; block9:
|
||||
; add x0, x0, x5
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,13 +10,8 @@ block1:
|
||||
return v0, v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #1
|
||||
; Inst 1: movz x1, #2
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #1
|
||||
; movz x1, #2
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,14 +8,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %add16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -23,14 +18,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %add32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -38,14 +28,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %add32_8(i32, i8) -> i32 {
|
||||
block0(v0: i32, v1: i8):
|
||||
@@ -54,14 +39,9 @@ block0(v0: i32, v1: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add w0, w0, w1, SXTB
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add w0, w0, w1, SXTB
|
||||
; ret
|
||||
|
||||
function %add64_32(i64, i32) -> i64 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -70,12 +50,7 @@ block0(v0: i64, v1: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add x0, x0, x1, SXTW
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x0, x1, SXTW
|
||||
; ret
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
set unwind_info=false
|
||||
target aarch64
|
||||
|
||||
@@ -75,19 +75,85 @@ block0(v0: f64):
|
||||
return v62
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: stp d14, d15, [sp, #-16]!
|
||||
; nextln: stp d12, d13, [sp, #-16]!
|
||||
; nextln: stp d10, d11, [sp, #-16]!
|
||||
; nextln: stp d8, d9, [sp, #-16]!
|
||||
|
||||
; check: ldp d8, d9, [sp], #16
|
||||
; nextln: ldp d10, d11, [sp], #16
|
||||
; nextln: ldp d12, d13, [sp], #16
|
||||
; nextln: ldp d14, d15, [sp], #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; stp d14, d15, [sp, #-16]!
|
||||
; stp d12, d13, [sp, #-16]!
|
||||
; stp d10, d11, [sp, #-16]!
|
||||
; stp d8, d9, [sp, #-16]!
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; fadd d4, d0, d0
|
||||
; fadd d6, d0, d0
|
||||
; str q6, [sp]
|
||||
; fadd d6, d0, d0
|
||||
; fadd d8, d0, d0
|
||||
; fadd d10, d0, d0
|
||||
; fadd d12, d0, d0
|
||||
; fadd d14, d0, d0
|
||||
; fadd d1, d0, d0
|
||||
; fadd d3, d0, d0
|
||||
; fadd d5, d0, d0
|
||||
; fadd d7, d0, d0
|
||||
; fadd d9, d0, d0
|
||||
; fadd d11, d0, d0
|
||||
; fadd d13, d0, d0
|
||||
; fadd d16, d0, d0
|
||||
; fadd d15, d0, d0
|
||||
; fadd d20, d0, d0
|
||||
; fadd d22, d0, d0
|
||||
; fadd d24, d0, d0
|
||||
; fadd d26, d0, d0
|
||||
; fadd d28, d0, d0
|
||||
; fadd d30, d0, d0
|
||||
; fadd d17, d0, d0
|
||||
; fadd d19, d0, d0
|
||||
; fadd d21, d0, d0
|
||||
; fadd d23, d0, d0
|
||||
; fadd d25, d0, d0
|
||||
; fadd d27, d0, d0
|
||||
; fadd d29, d0, d0
|
||||
; fadd d18, d0, d0
|
||||
; fadd d2, d0, d0
|
||||
; fadd d0, d0, d4
|
||||
; ldr q4, [sp]
|
||||
; fadd d6, d4, d6
|
||||
; fadd d4, d8, d10
|
||||
; fadd d10, d12, d14
|
||||
; fadd d8, d1, d3
|
||||
; fadd d14, d5, d7
|
||||
; fadd d12, d9, d11
|
||||
; fadd d3, d13, d16
|
||||
; fadd d1, d15, d20
|
||||
; fadd d7, d22, d24
|
||||
; fadd d5, d26, d28
|
||||
; fadd d11, d30, d17
|
||||
; fadd d9, d19, d21
|
||||
; fadd d15, d23, d25
|
||||
; fadd d13, d27, d29
|
||||
; fadd d2, d18, d2
|
||||
; fadd d0, d0, d6
|
||||
; fadd d6, d4, d10
|
||||
; fadd d4, d8, d14
|
||||
; fadd d10, d12, d3
|
||||
; fadd d8, d1, d7
|
||||
; fadd d11, d5, d11
|
||||
; fadd d12, d9, d15
|
||||
; fadd d14, d13, d2
|
||||
; fadd d0, d0, d6
|
||||
; fadd d2, d4, d10
|
||||
; fadd d4, d8, d11
|
||||
; fadd d6, d12, d14
|
||||
; fadd d8, d0, d2
|
||||
; fadd d10, d4, d6
|
||||
; fadd d0, d8, d10
|
||||
; add sp, sp, #16
|
||||
; ldp d8, d9, [sp], #16
|
||||
; ldp d10, d11, [sp], #16
|
||||
; ldp d12, d13, [sp], #16
|
||||
; ldp d14, d15, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %f2(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -135,14 +201,49 @@ block0(v0: i64):
|
||||
return v36
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: str x22, [sp, #-16]!
|
||||
; nextln: stp x19, x20, [sp, #-16]!
|
||||
; nextln: add x1, x0, x0
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x28, [sp, #-16]!
|
||||
; stp x19, x21, [sp, #-16]!
|
||||
; block0:
|
||||
; add x6, x0, x0
|
||||
; add x7, x0, x6
|
||||
; add x8, x0, x7
|
||||
; add x9, x0, x8
|
||||
; add x10, x0, x9
|
||||
; add x11, x0, x10
|
||||
; add x12, x0, x11
|
||||
; add x13, x0, x12
|
||||
; add x14, x0, x13
|
||||
; add x15, x0, x14
|
||||
; add x1, x0, x15
|
||||
; add x2, x0, x1
|
||||
; add x3, x0, x2
|
||||
; add x4, x0, x3
|
||||
; add x5, x0, x4
|
||||
; add x28, x0, x5
|
||||
; add x21, x0, x28
|
||||
; add x19, x0, x21
|
||||
; add x6, x0, x6
|
||||
; add x7, x7, x8
|
||||
; add x8, x9, x10
|
||||
; add x9, x11, x12
|
||||
; add x10, x13, x14
|
||||
; add x11, x15, x1
|
||||
; add x12, x2, x3
|
||||
; add x13, x4, x5
|
||||
; add x14, x28, x21
|
||||
; add x6, x19, x6
|
||||
; add x7, x7, x8
|
||||
; add x8, x9, x10
|
||||
; add x9, x11, x12
|
||||
; add x10, x13, x14
|
||||
; add x6, x6, x7
|
||||
; add x7, x8, x9
|
||||
; add x6, x10, x6
|
||||
; add x0, x7, x6
|
||||
; ldp x19, x21, [sp], #16
|
||||
; ldr x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
; check: add x0, x1, x0
|
||||
; nextln: ldp x19, x20, [sp], #16
|
||||
; nextln: ldr x22, [sp], #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
@@ -8,13 +8,8 @@ block0(v0: i128):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %ireduce_128_32(i128) -> i32 {
|
||||
block0(v0: i128):
|
||||
@@ -22,13 +17,8 @@ block0(v0: i128):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %ireduce_128_16(i128) -> i16 {
|
||||
block0(v0: i128):
|
||||
@@ -36,13 +26,8 @@ block0(v0: i128):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %ireduce_128_8(i128) -> i8 {
|
||||
block0(v0: i128):
|
||||
@@ -50,11 +35,6 @@ block0(v0: i128):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,13 +7,8 @@ block0(v0: r64):
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %f1(r64) -> b1 {
|
||||
block0(v0: r64):
|
||||
@@ -21,15 +16,10 @@ block0(v0: r64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs xzr, x0, #0
|
||||
; Inst 1: cset x0, eq
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, #0
|
||||
; cset x0, eq
|
||||
; ret
|
||||
|
||||
function %f2(r64) -> b1 {
|
||||
block0(v0: r64):
|
||||
@@ -37,15 +27,10 @@ block0(v0: r64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: adds xzr, x0, #1
|
||||
; Inst 1: cset x0, eq
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; adds xzr, x0, #1
|
||||
; cset x0, eq
|
||||
; ret
|
||||
|
||||
function %f3() -> r64 {
|
||||
block0:
|
||||
@@ -53,14 +38,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movz x0, #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x0, #0
|
||||
; ret
|
||||
|
||||
function %f4(r64, r64) -> r64, r64, r64 {
|
||||
fn0 = %f(r64) -> b1
|
||||
@@ -83,63 +63,38 @@ block3(v7: r64, v8: r64):
|
||||
return v7, v8, v9
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 3)
|
||||
; (instruction range: 0 .. 18)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: stp x19, x20, [sp, #-16]!
|
||||
; Inst 3: sub sp, sp, #32
|
||||
; Inst 4: mov x19, x0
|
||||
; Inst 5: mov x20, x1
|
||||
; Inst 6: mov x0, x19
|
||||
; Inst 7: ldr x1, 8 ; b 12 ; data TestCase { length: 1, ascii: [102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; Inst 8: stur x0, [sp, #8]
|
||||
; Inst 9: stur x19, [sp, #16]
|
||||
; Inst 10: stur x20, [sp, #24]
|
||||
; (safepoint: slots [S0, S1, S2] with EmitState EmitState { virtual_sp_offset: 0, nominal_sp_to_fp: 0, stack_map: None, cur_srcloc: SourceLoc(4294967295) })
|
||||
; Inst 11: blr x1
|
||||
; Inst 12: ldur x19, [sp, #16]
|
||||
; Inst 13: ldur x20, [sp, #24]
|
||||
; Inst 14: mov x1, sp
|
||||
; Inst 15: str x19, [x1]
|
||||
; Inst 16: and w0, w0, #1
|
||||
; Inst 17: cbz x0, label1 ; b label3
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 18 .. 19)
|
||||
; Inst 18: b label2
|
||||
; Block 2:
|
||||
; (successor: Block 5)
|
||||
; (instruction range: 19 .. 21)
|
||||
; Inst 19: mov x0, x20
|
||||
; Inst 20: b label5
|
||||
; Block 3:
|
||||
; (original IR block: block2)
|
||||
; (successor: Block 4)
|
||||
; (instruction range: 21 .. 22)
|
||||
; Inst 21: b label4
|
||||
; Block 4:
|
||||
; (successor: Block 5)
|
||||
; (instruction range: 22 .. 25)
|
||||
; Inst 22: mov x0, x19
|
||||
; Inst 23: mov x19, x20
|
||||
; Inst 24: b label5
|
||||
; Block 5:
|
||||
; (original IR block: block3)
|
||||
; (instruction range: 25 .. 33)
|
||||
; Inst 25: mov x1, sp
|
||||
; Inst 26: ldr x1, [x1]
|
||||
; Inst 27: mov x2, x1
|
||||
; Inst 28: mov x1, x19
|
||||
; Inst 29: add sp, sp, #32
|
||||
; Inst 30: ldp x19, x20, [sp], #16
|
||||
; Inst 31: ldp fp, lr, [sp], #16
|
||||
; Inst 32: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; mov x4, x1
|
||||
; mov x2, x0
|
||||
; ldr x3, 8 ; b 12 ; data TestCase { length: 1, ascii: [102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; str x2, [sp, #8]
|
||||
; str x4, [sp, #16]
|
||||
; blr x3
|
||||
; ldr x2, [sp, #8]
|
||||
; mov x9, sp
|
||||
; mov x12, x2
|
||||
; str x12, [x9]
|
||||
; and w7, w0, #1
|
||||
; cbz x7, label1 ; b label3
|
||||
; block1:
|
||||
; b label2
|
||||
; block2:
|
||||
; mov x1, x12
|
||||
; ldr x0, [sp, #16]
|
||||
; b label5
|
||||
; block3:
|
||||
; b label4
|
||||
; block4:
|
||||
; mov x0, x12
|
||||
; ldr x1, [sp, #16]
|
||||
; b label5
|
||||
; block5:
|
||||
; mov x4, sp
|
||||
; ldr x2, [x4]
|
||||
; add sp, sp, #32
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,14 +10,9 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: add x0, x0, x0, LSL 3
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; add x0, x0, x0, LSL 3
|
||||
; ret
|
||||
|
||||
function %f(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -26,12 +21,7 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsl w0, w0, #21
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsl w0, w0, #21
|
||||
; ret
|
||||
|
||||
|
||||
@@ -12,37 +12,30 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 25)
|
||||
; Inst 0: mov x4, x1
|
||||
; Inst 1: orr x1, xzr, #128
|
||||
; Inst 2: sub x1, x1, x2
|
||||
; Inst 3: lsr x5, x0, x2
|
||||
; Inst 4: lsr x3, x4, x2
|
||||
; Inst 5: orn w6, wzr, w2
|
||||
; Inst 6: lsl x7, x4, #1
|
||||
; Inst 7: lsl x6, x7, x6
|
||||
; Inst 8: orr x5, x5, x6
|
||||
; Inst 9: ands xzr, x2, #64
|
||||
; Inst 10: csel x2, x3, x5, ne
|
||||
; Inst 11: csel x3, xzr, x3, ne
|
||||
; Inst 12: lsl x5, x0, x1
|
||||
; Inst 13: lsl x4, x4, x1
|
||||
; Inst 14: orn w6, wzr, w1
|
||||
; Inst 15: lsr x0, x0, #1
|
||||
; Inst 16: lsr x0, x0, x6
|
||||
; Inst 17: orr x0, x4, x0
|
||||
; Inst 18: ands xzr, x1, #64
|
||||
; Inst 19: csel x1, xzr, x5, ne
|
||||
; Inst 20: csel x0, x5, x0, ne
|
||||
; Inst 21: orr x3, x3, x0
|
||||
; Inst 22: orr x0, x2, x1
|
||||
; Inst 23: mov x1, x3
|
||||
; Inst 24: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x10, xzr, #128
|
||||
; sub x12, x10, x2
|
||||
; lsr x14, x0, x2
|
||||
; lsr x3, x1, x2
|
||||
; orn w4, wzr, w2
|
||||
; lsl x5, x1, #1
|
||||
; lsl x6, x5, x4
|
||||
; orr x8, x14, x6
|
||||
; ands xzr, x2, #64
|
||||
; csel x11, x3, x8, ne
|
||||
; csel x13, xzr, x3, ne
|
||||
; lsl x15, x0, x12
|
||||
; lsl x1, x1, x12
|
||||
; orn w3, wzr, w12
|
||||
; lsr x5, x0, #1
|
||||
; lsr x7, x5, x3
|
||||
; orr x9, x1, x7
|
||||
; ands xzr, x12, #64
|
||||
; csel x12, xzr, x15, ne
|
||||
; csel x14, x15, x9, ne
|
||||
; orr x1, x13, x14
|
||||
; orr x0, x11, x12
|
||||
; ret
|
||||
|
||||
function %f0(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -50,14 +43,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ror x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ror x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f1(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -65,14 +53,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ror w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ror w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %f2(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -80,20 +63,15 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: and w1, w1, #15
|
||||
; Inst 2: sub w2, w1, #16
|
||||
; Inst 3: sub w2, wzr, w2
|
||||
; Inst 4: lsr w1, w0, w1
|
||||
; Inst 5: lsl w0, w0, w2
|
||||
; Inst 6: orr w0, w0, w1
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w5, w0
|
||||
; and w7, w1, #15
|
||||
; sub w9, w7, #16
|
||||
; sub w11, wzr, w9
|
||||
; lsr w13, w5, w7
|
||||
; lsl w15, w5, w11
|
||||
; orr w0, w15, w13
|
||||
; ret
|
||||
|
||||
function %f3(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -101,20 +79,15 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: and w1, w1, #7
|
||||
; Inst 2: sub w2, w1, #8
|
||||
; Inst 3: sub w2, wzr, w2
|
||||
; Inst 4: lsr w1, w0, w1
|
||||
; Inst 5: lsl w0, w0, w2
|
||||
; Inst 6: orr w0, w0, w1
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w5, w0
|
||||
; and w7, w1, #7
|
||||
; sub w9, w7, #8
|
||||
; sub w11, wzr, w9
|
||||
; lsr w13, w5, w7
|
||||
; lsl w15, w5, w11
|
||||
; orr w0, w15, w13
|
||||
; ret
|
||||
|
||||
function %i128_rotl(i128, i128) -> i128 {
|
||||
block0(v0: i128, v1: i128):
|
||||
@@ -122,36 +95,30 @@ block0(v0: i128, v1: i128):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 24)
|
||||
; Inst 0: mov x4, x0
|
||||
; Inst 1: orr x0, xzr, #128
|
||||
; Inst 2: sub x0, x0, x2
|
||||
; Inst 3: lsl x3, x4, x2
|
||||
; Inst 4: lsl x5, x1, x2
|
||||
; Inst 5: orn w6, wzr, w2
|
||||
; Inst 6: lsr x7, x4, #1
|
||||
; Inst 7: lsr x6, x7, x6
|
||||
; Inst 8: orr x5, x5, x6
|
||||
; Inst 9: ands xzr, x2, #64
|
||||
; Inst 10: csel x2, xzr, x3, ne
|
||||
; Inst 11: csel x3, x3, x5, ne
|
||||
; Inst 12: lsr x5, x4, x0
|
||||
; Inst 13: lsr x4, x1, x0
|
||||
; Inst 14: orn w6, wzr, w0
|
||||
; Inst 15: lsl x1, x1, #1
|
||||
; Inst 16: lsl x1, x1, x6
|
||||
; Inst 17: orr x1, x5, x1
|
||||
; Inst 18: ands xzr, x0, #64
|
||||
; Inst 19: csel x0, x4, x1, ne
|
||||
; Inst 20: csel x1, xzr, x4, ne
|
||||
; Inst 21: orr x0, x2, x0
|
||||
; Inst 22: orr x1, x3, x1
|
||||
; Inst 23: ret
|
||||
; }}
|
||||
; block0:
|
||||
; orr x10, xzr, #128
|
||||
; sub x12, x10, x2
|
||||
; lsl x14, x0, x2
|
||||
; lsl x3, x1, x2
|
||||
; orn w4, wzr, w2
|
||||
; lsr x5, x0, #1
|
||||
; lsr x6, x5, x4
|
||||
; orr x8, x3, x6
|
||||
; ands xzr, x2, #64
|
||||
; csel x11, xzr, x14, ne
|
||||
; csel x13, x14, x8, ne
|
||||
; lsr x15, x0, x12
|
||||
; lsr x2, x1, x12
|
||||
; orn w3, wzr, w12
|
||||
; lsl x5, x1, #1
|
||||
; lsl x7, x5, x3
|
||||
; orr x9, x15, x7
|
||||
; ands xzr, x12, #64
|
||||
; csel x12, x2, x9, ne
|
||||
; csel x14, xzr, x2, ne
|
||||
; orr x0, x11, x12
|
||||
; orr x1, x13, x14
|
||||
; ret
|
||||
|
||||
function %f4(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -159,15 +126,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sub x1, xzr, x1
|
||||
; Inst 1: ror x0, x0, x1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub x5, xzr, x1
|
||||
; ror x0, x0, x5
|
||||
; ret
|
||||
|
||||
function %f5(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -175,15 +137,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: sub w1, wzr, w1
|
||||
; Inst 1: ror w0, w0, w1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub w5, wzr, w1
|
||||
; ror w0, w0, w5
|
||||
; ret
|
||||
|
||||
function %f6(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -191,21 +148,16 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: sub w1, wzr, w1
|
||||
; Inst 1: uxth w0, w0
|
||||
; Inst 2: and w1, w1, #15
|
||||
; Inst 3: sub w2, w1, #16
|
||||
; Inst 4: sub w2, wzr, w2
|
||||
; Inst 5: lsr w1, w0, w1
|
||||
; Inst 6: lsl w0, w0, w2
|
||||
; Inst 7: orr w0, w0, w1
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub w5, wzr, w1
|
||||
; uxth w7, w0
|
||||
; and w9, w5, #15
|
||||
; sub w11, w9, #16
|
||||
; sub w13, wzr, w11
|
||||
; lsr w15, w7, w9
|
||||
; lsl w1, w7, w13
|
||||
; orr w0, w1, w15
|
||||
; ret
|
||||
|
||||
function %f7(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -213,21 +165,16 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: sub w1, wzr, w1
|
||||
; Inst 1: uxtb w0, w0
|
||||
; Inst 2: and w1, w1, #7
|
||||
; Inst 3: sub w2, w1, #8
|
||||
; Inst 4: sub w2, wzr, w2
|
||||
; Inst 5: lsr w1, w0, w1
|
||||
; Inst 6: lsl w0, w0, w2
|
||||
; Inst 7: orr w0, w0, w1
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sub w5, wzr, w1
|
||||
; uxtb w7, w0
|
||||
; and w9, w5, #7
|
||||
; sub w11, w9, #8
|
||||
; sub w13, wzr, w11
|
||||
; lsr w15, w7, w9
|
||||
; lsl w1, w7, w13
|
||||
; orr w0, w1, w15
|
||||
; ret
|
||||
|
||||
function %f8(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -235,14 +182,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsr x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsr x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f9(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -250,14 +192,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsr w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsr w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %f10(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -265,16 +202,11 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: and w1, w1, #15
|
||||
; Inst 2: lsr w0, w0, w1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w5, w0
|
||||
; and w7, w1, #15
|
||||
; lsr w0, w5, w7
|
||||
; ret
|
||||
|
||||
function %f11(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -282,16 +214,11 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: and w1, w1, #7
|
||||
; Inst 2: lsr w0, w0, w1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w5, w0
|
||||
; and w7, w1, #7
|
||||
; lsr w0, w5, w7
|
||||
; ret
|
||||
|
||||
function %f12(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -299,14 +226,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsl x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsl x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f13(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -314,14 +236,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsl w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsl w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %f14(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -329,15 +246,10 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: and w1, w1, #15
|
||||
; Inst 1: lsl w0, w0, w1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and w5, w1, #15
|
||||
; lsl w0, w0, w5
|
||||
; ret
|
||||
|
||||
function %f15(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -345,15 +257,10 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: and w1, w1, #7
|
||||
; Inst 1: lsl w0, w0, w1
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; and w5, w1, #7
|
||||
; lsl w0, w0, w5
|
||||
; ret
|
||||
|
||||
function %f16(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -361,14 +268,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: asr x0, x0, x1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; asr x0, x0, x1
|
||||
; ret
|
||||
|
||||
function %f17(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -376,14 +278,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: asr w0, w0, w1
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; asr w0, w0, w1
|
||||
; ret
|
||||
|
||||
function %f18(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -391,16 +288,11 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: sxth w0, w0
|
||||
; Inst 1: and w1, w1, #15
|
||||
; Inst 2: asr w0, w0, w1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxth w5, w0
|
||||
; and w7, w1, #15
|
||||
; asr w0, w5, w7
|
||||
; ret
|
||||
|
||||
function %f19(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -408,16 +300,11 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: sxtb w0, w0
|
||||
; Inst 1: and w1, w1, #7
|
||||
; Inst 2: asr w0, w0, w1
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb w5, w0
|
||||
; and w7, w1, #7
|
||||
; asr w0, w5, w7
|
||||
; ret
|
||||
|
||||
function %f20(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -426,14 +313,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ror x0, x0, #17
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ror x0, x0, #17
|
||||
; ret
|
||||
|
||||
function %f21(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -442,14 +324,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ror x0, x0, #47
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ror x0, x0, #47
|
||||
; ret
|
||||
|
||||
function %f22(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -458,14 +335,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ror w0, w0, #15
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ror w0, w0, #15
|
||||
; ret
|
||||
|
||||
function %f23(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -474,17 +346,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: lsr w1, w0, #6
|
||||
; Inst 2: lsl w0, w0, #10
|
||||
; Inst 3: orr w0, w0, w1
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w3, w0
|
||||
; lsr w5, w3, #6
|
||||
; lsl w7, w3, #10
|
||||
; orr w0, w7, w5
|
||||
; ret
|
||||
|
||||
function %f24(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -493,17 +360,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: lsr w1, w0, #5
|
||||
; Inst 2: lsl w0, w0, #3
|
||||
; Inst 3: orr w0, w0, w1
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w3, w0
|
||||
; lsr w5, w3, #5
|
||||
; lsl w7, w3, #3
|
||||
; orr w0, w7, w5
|
||||
; ret
|
||||
|
||||
function %f25(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -512,14 +374,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsr x0, x0, #17
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsr x0, x0, #17
|
||||
; ret
|
||||
|
||||
function %f26(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -528,14 +385,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: asr x0, x0, #17
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; asr x0, x0, #17
|
||||
; ret
|
||||
|
||||
function %f27(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -544,12 +396,7 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: lsl x0, x0, #17
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; lsl x0, x0, #17
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,14 +10,9 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull v0.8h, v0.8b, v1.8b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull v0.8h, v0.8b, v1.8b
|
||||
; ret
|
||||
|
||||
function %fn2(i8x16, i8x16) -> i16x8 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -27,14 +22,9 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull2 v0.8h, v0.16b, v1.16b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull2 v0.8h, v0.16b, v1.16b
|
||||
; ret
|
||||
|
||||
function %fn3(i16x8, i16x8) -> i32x4 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
@@ -44,14 +34,9 @@ block0(v0: i16x8, v1: i16x8):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull v0.4s, v0.4h, v1.4h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull v0.4s, v0.4h, v1.4h
|
||||
; ret
|
||||
|
||||
function %fn4(i16x8, i16x8) -> i32x4 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
@@ -61,14 +46,9 @@ block0(v0: i16x8, v1: i16x8):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull2 v0.4s, v0.8h, v1.8h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull2 v0.4s, v0.8h, v1.8h
|
||||
; ret
|
||||
|
||||
function %fn5(i32x4, i32x4) -> i64x2 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -78,14 +58,9 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull v0.2d, v0.2s, v1.2s
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull v0.2d, v0.2s, v1.2s
|
||||
; ret
|
||||
|
||||
function %fn6(i32x4, i32x4) -> i64x2 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -95,14 +70,9 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: smull2 v0.2d, v0.4s, v1.4s
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; smull2 v0.2d, v0.4s, v1.4s
|
||||
; ret
|
||||
|
||||
function %fn7(i8x16, i8x16) -> i16x8 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -112,14 +82,9 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull v0.8h, v0.8b, v1.8b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull v0.8h, v0.8b, v1.8b
|
||||
; ret
|
||||
|
||||
function %fn8(i8x16, i8x16) -> i16x8 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -129,14 +94,9 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull2 v0.8h, v0.16b, v1.16b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull2 v0.8h, v0.16b, v1.16b
|
||||
; ret
|
||||
|
||||
function %fn9(i16x8, i16x8) -> i32x4 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
@@ -146,14 +106,9 @@ block0(v0: i16x8, v1: i16x8):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull v0.4s, v0.4h, v1.4h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull v0.4s, v0.4h, v1.4h
|
||||
; ret
|
||||
|
||||
function %fn10(i16x8, i16x8) -> i32x4 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
@@ -163,14 +118,9 @@ block0(v0: i16x8, v1: i16x8):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull2 v0.4s, v0.8h, v1.8h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull2 v0.4s, v0.8h, v1.8h
|
||||
; ret
|
||||
|
||||
function %fn11(i32x4, i32x4) -> i64x2 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -180,14 +130,9 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull v0.2d, v0.2s, v1.2s
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull v0.2d, v0.2s, v1.2s
|
||||
; ret
|
||||
|
||||
function %fn12(i32x4, i32x4) -> i64x2 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -197,12 +142,7 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: umull2 v0.2d, v0.4s, v1.4s
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; umull2 v0.2d, v0.4s, v1.4s
|
||||
; ret
|
||||
|
||||
|
||||
@@ -11,14 +11,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: saddlp v0.8h, v0.16b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; saddlp v0.8h, v0.16b
|
||||
; ret
|
||||
|
||||
function %fn2(i8x16) -> i16x8 {
|
||||
block0(v0: i8x16):
|
||||
@@ -28,14 +23,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uaddlp v0.8h, v0.16b
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uaddlp v0.8h, v0.16b
|
||||
; ret
|
||||
|
||||
function %fn3(i16x8) -> i32x4 {
|
||||
block0(v0: i16x8):
|
||||
@@ -45,14 +35,9 @@ block0(v0: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: saddlp v0.4s, v0.8h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; saddlp v0.4s, v0.8h
|
||||
; ret
|
||||
|
||||
function %fn4(i16x8) -> i32x4 {
|
||||
block0(v0: i16x8):
|
||||
@@ -62,14 +47,9 @@ block0(v0: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uaddlp v0.4s, v0.8h
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uaddlp v0.4s, v0.8h
|
||||
; ret
|
||||
|
||||
function %fn5(i8x16, i8x16) -> i16x8 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -79,16 +59,11 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: sxtl v0.8h, v0.8b
|
||||
; Inst 1: sxtl2 v1.8h, v1.16b
|
||||
; Inst 2: addp v0.8h, v0.8h, v1.8h
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtl v4.8h, v0.8b
|
||||
; sxtl2 v6.8h, v1.16b
|
||||
; addp v0.8h, v4.8h, v6.8h
|
||||
; ret
|
||||
|
||||
function %fn6(i8x16, i8x16) -> i16x8 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -98,16 +73,11 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxtl v0.8h, v0.8b
|
||||
; Inst 1: uxtl2 v1.8h, v1.16b
|
||||
; Inst 2: addp v0.8h, v0.8h, v1.8h
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtl v4.8h, v0.8b
|
||||
; uxtl2 v6.8h, v1.16b
|
||||
; addp v0.8h, v4.8h, v6.8h
|
||||
; ret
|
||||
|
||||
function %fn7(i8x16) -> i16x8 {
|
||||
block0(v0: i8x16):
|
||||
@@ -117,16 +87,11 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: uxtl v1.8h, v0.8b
|
||||
; Inst 1: sxtl2 v0.8h, v0.16b
|
||||
; Inst 2: addp v0.8h, v1.8h, v0.8h
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtl v2.8h, v0.8b
|
||||
; sxtl2 v4.8h, v0.16b
|
||||
; addp v0.8h, v2.8h, v4.8h
|
||||
; ret
|
||||
|
||||
function %fn8(i8x16) -> i16x8 {
|
||||
block0(v0: i8x16):
|
||||
@@ -136,14 +101,9 @@ block0(v0: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: sxtl v1.8h, v0.8b
|
||||
; Inst 1: uxtl2 v0.8h, v0.16b
|
||||
; Inst 2: addp v0.8h, v1.8h, v0.8h
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtl v2.8h, v0.8b
|
||||
; uxtl2 v4.8h, v0.16b
|
||||
; addp v0.8h, v2.8h, v4.8h
|
||||
; ret
|
||||
|
||||
|
||||
@@ -9,16 +9,11 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: movz x0, #1
|
||||
; Inst 1: movk x0, #1, LSL #48
|
||||
; Inst 2: dup v0.2d, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #1
|
||||
; movk x2, #1, LSL #48
|
||||
; dup v0.2d, x2
|
||||
; ret
|
||||
|
||||
function %f2() -> i16x8 {
|
||||
block0:
|
||||
@@ -28,15 +23,10 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #42679
|
||||
; Inst 1: dup v0.8h, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #42679
|
||||
; dup v0.8h, w2
|
||||
; ret
|
||||
|
||||
function %f3() -> b8x16 {
|
||||
block0:
|
||||
@@ -46,14 +36,9 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: movi v0.16b, #255
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movi v0.16b, #255
|
||||
; ret
|
||||
|
||||
function %f4(i32, i8x16, i8x16) -> i8x16 {
|
||||
block0(v0: i32, v1: i8x16, v2: i8x16):
|
||||
@@ -61,15 +46,10 @@ block0(v0: i32, v1: i8x16, v2: i8x16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs wzr, w0, wzr
|
||||
; Inst 1: vcsel v0.16b, v0.16b, v1.16b, ne (if-then-else diamond)
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs wzr, w0, wzr
|
||||
; vcsel v0.16b, v0.16b, v1.16b, ne (if-then-else diamond)
|
||||
; ret
|
||||
|
||||
function %f5(i64) -> i8x16 {
|
||||
block0(v0: i64):
|
||||
@@ -78,14 +58,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ld1r { v0.16b }, [x0]
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ld1r { v0.16b }, [x0]
|
||||
; ret
|
||||
|
||||
function %f6(i64, i64) -> i8x16, i8x16 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -96,15 +71,10 @@ block0(v0: i64, v1: i64):
|
||||
return v4, v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: ld1r { v0.16b }, [x0]
|
||||
; Inst 1: ld1r { v1.16b }, [x1]
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ld1r { v0.16b }, [x0]
|
||||
; ld1r { v1.16b }, [x1]
|
||||
; ret
|
||||
|
||||
function %f7(i64, i64) -> i8x16, i8x16 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -115,16 +85,11 @@ block0(v0: i64, v1: i64):
|
||||
return v4, v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: ldrb w0, [x0]
|
||||
; Inst 1: ld1r { v0.16b }, [x1]
|
||||
; Inst 2: dup v1.16b, w0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldrb w4, [x0]
|
||||
; ld1r { v0.16b }, [x1]
|
||||
; dup v1.16b, w4
|
||||
; ret
|
||||
|
||||
function %f8(i64, i64) -> i8x16, i8x16 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -134,16 +99,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3, v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: ldrb w0, [x0]
|
||||
; Inst 1: dup v0.16b, w0
|
||||
; Inst 2: dup v1.16b, w0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldrb w4, [x0]
|
||||
; dup v0.16b, w4
|
||||
; dup v1.16b, w4
|
||||
; ret
|
||||
|
||||
function %f9() -> i32x2 {
|
||||
block0:
|
||||
@@ -152,15 +112,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movi v0.2d, #18374687579166474495
|
||||
; Inst 1: fmov d0, d0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movi v0.2d, #18374687579166474495
|
||||
; fmov d0, d0
|
||||
; ret
|
||||
|
||||
function %f10() -> i32x4 {
|
||||
block0:
|
||||
@@ -169,14 +124,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: mvni v0.4s, #15, MSL #16
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mvni v0.4s, #15, MSL #16
|
||||
; ret
|
||||
|
||||
function %f11() -> f32x4 {
|
||||
block0:
|
||||
@@ -185,12 +135,7 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: fmov v0.4s, #1.3125
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; fmov v0.4s, #1.3125
|
||||
; ret
|
||||
|
||||
|
||||
@@ -9,16 +9,11 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: movz x0, #1
|
||||
; Inst 1: movk x0, #1, LSL #48
|
||||
; Inst 2: fmov d0, x0
|
||||
; Inst 3: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #1
|
||||
; movk x2, #1, LSL #48
|
||||
; fmov d0, x2
|
||||
; ret
|
||||
|
||||
function %f2() -> i32x4 {
|
||||
block0:
|
||||
@@ -27,13 +22,8 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: movz x0, #42679
|
||||
; Inst 1: fmov s0, w0
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; movz x2, #42679
|
||||
; fmov s0, w2
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,26 +7,16 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %stack_limit_leaf_zero(i64 stack_limit) {
|
||||
block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %stack_limit_gv_leaf_zero(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -37,13 +27,8 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ret
|
||||
|
||||
function %stack_limit_call_zero(i64 stack_limit) {
|
||||
fn0 = %foo()
|
||||
@@ -52,20 +37,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: subs xzr, sp, x0, UXTX
|
||||
; Inst 3: b.hs 8 ; udf
|
||||
; Inst 4: ldr x0, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; Inst 5: blr x0
|
||||
; Inst 6: ldp fp, lr, [sp], #16
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; subs xzr, sp, x0, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; block0:
|
||||
; ldr x2, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x2
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_limit_gv_call_zero(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -78,22 +58,17 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 10)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: ldur x16, [x0]
|
||||
; Inst 3: ldur x16, [x16, #4]
|
||||
; Inst 4: subs xzr, sp, x16, UXTX
|
||||
; Inst 5: b.hs 8 ; udf
|
||||
; Inst 6: ldr x0, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; Inst 7: blr x0
|
||||
; Inst 8: ldp fp, lr, [sp], #16
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; ldr x16, [x0]
|
||||
; ldr x16, [x16, #4]
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; block0:
|
||||
; ldr x2, 8 ; b 12 ; data TestCase { length: 3, ascii: [102, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; blr x2
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 168
|
||||
@@ -101,21 +76,16 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: add x16, x0, #176
|
||||
; Inst 3: subs xzr, sp, x16, UXTX
|
||||
; Inst 4: b.hs 8 ; udf
|
||||
; Inst 5: sub sp, sp, #176
|
||||
; Inst 6: add sp, sp, #176
|
||||
; Inst 7: ldp fp, lr, [sp], #16
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; add x16, x0, #176
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; sub sp, sp, #176
|
||||
; block0:
|
||||
; add sp, sp, #176
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %huge_stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 400000
|
||||
@@ -123,29 +93,24 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 17)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: subs xzr, sp, x0, UXTX
|
||||
; Inst 3: b.hs 8 ; udf
|
||||
; Inst 4: movz w17, #6784
|
||||
; Inst 5: movk w17, #6, LSL #16
|
||||
; Inst 6: add x16, x0, x17, UXTX
|
||||
; Inst 7: subs xzr, sp, x16, UXTX
|
||||
; Inst 8: b.hs 8 ; udf
|
||||
; Inst 9: movz w16, #6784
|
||||
; Inst 10: movk w16, #6, LSL #16
|
||||
; Inst 11: sub sp, sp, x16, UXTX
|
||||
; Inst 12: movz w16, #6784
|
||||
; Inst 13: movk w16, #6, LSL #16
|
||||
; Inst 14: add sp, sp, x16, UXTX
|
||||
; Inst 15: ldp fp, lr, [sp], #16
|
||||
; Inst 16: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; subs xzr, sp, x0, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; movz w17, #6784
|
||||
; movk w17, #6, LSL #16
|
||||
; add x16, x0, x17, UXTX
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; movz w16, #6784
|
||||
; movk w16, #6, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; movz w16, #6784
|
||||
; movk w16, #6, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %limit_preamble(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -157,23 +122,18 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: ldur x16, [x0]
|
||||
; Inst 3: ldur x16, [x16, #4]
|
||||
; Inst 4: add x16, x16, #32
|
||||
; Inst 5: subs xzr, sp, x16, UXTX
|
||||
; Inst 6: b.hs 8 ; udf
|
||||
; Inst 7: sub sp, sp, #32
|
||||
; Inst 8: add sp, sp, #32
|
||||
; Inst 9: ldp fp, lr, [sp], #16
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; ldr x16, [x0]
|
||||
; ldr x16, [x16, #4]
|
||||
; add x16, x16, #32
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add sp, sp, #32
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %limit_preamble_huge(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -185,31 +145,26 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 19)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: ldur x16, [x0]
|
||||
; Inst 3: ldur x16, [x16, #4]
|
||||
; Inst 4: subs xzr, sp, x16, UXTX
|
||||
; Inst 5: b.hs 8 ; udf
|
||||
; Inst 6: movz w17, #6784
|
||||
; Inst 7: movk w17, #6, LSL #16
|
||||
; Inst 8: add x16, x16, x17, UXTX
|
||||
; Inst 9: subs xzr, sp, x16, UXTX
|
||||
; Inst 10: b.hs 8 ; udf
|
||||
; Inst 11: movz w16, #6784
|
||||
; Inst 12: movk w16, #6, LSL #16
|
||||
; Inst 13: sub sp, sp, x16, UXTX
|
||||
; Inst 14: movz w16, #6784
|
||||
; Inst 15: movk w16, #6, LSL #16
|
||||
; Inst 16: add sp, sp, x16, UXTX
|
||||
; Inst 17: ldp fp, lr, [sp], #16
|
||||
; Inst 18: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; ldr x16, [x0]
|
||||
; ldr x16, [x16, #4]
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; movz w17, #6784
|
||||
; movk w17, #6, LSL #16
|
||||
; add x16, x16, x17, UXTX
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; movz w16, #6784
|
||||
; movk w16, #6, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; movz w16, #6784
|
||||
; movk w16, #6, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %limit_preamble_huge_offset(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -220,20 +175,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 10)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: movz w16, #6784 ; movk w16, #6, LSL #16 ; add x16, x0, x16, UXTX ; ldr x16, [x16]
|
||||
; Inst 3: add x16, x16, #32
|
||||
; Inst 4: subs xzr, sp, x16, UXTX
|
||||
; Inst 5: b.hs 8 ; udf
|
||||
; Inst 6: sub sp, sp, #32
|
||||
; Inst 7: add sp, sp, #32
|
||||
; Inst 8: ldp fp, lr, [sp], #16
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #6784 ; movk w16, #6, LSL #16 ; add x16, x0, x16, UXTX ; ldr x16, [x16]
|
||||
; add x16, x16, #32
|
||||
; subs xzr, sp, x16, UXTX
|
||||
; b.hs 8 ; udf
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add sp, sp, #32
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
set unwind_info=false
|
||||
target aarch64
|
||||
|
||||
@@ -10,14 +10,14 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: mov x0, sp
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; add sp, sp, #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_addr_big() -> i64 {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -28,20 +28,18 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: sub sp, sp, x16, UXTX
|
||||
; nextln: mov x0, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: add sp, sp, x16, UXTX
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
|
||||
; FIXME: don't use stack_addr legalization for stack_load and stack_store
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_load_small() -> i64 {
|
||||
ss0 = explicit_slot 8
|
||||
@@ -51,15 +49,15 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: mov x0, sp
|
||||
; nextln: ldr x0, [x0]
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; ldr x0, [x0]
|
||||
; add sp, sp, #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_load_big() -> i64 {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -70,19 +68,19 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: sub sp, sp, x16, UXTX
|
||||
; nextln: mov x0, sp
|
||||
; nextln: ldr x0, [x0]
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: add sp, sp, x16, UXTX
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; ldr x0, [x0]
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_store_small(i64) {
|
||||
ss0 = explicit_slot 8
|
||||
@@ -92,15 +90,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: mov x1, sp
|
||||
; nextln: str x0, [x1]
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; mov x2, sp
|
||||
; str x0, [x2]
|
||||
; add sp, sp, #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %stack_store_big(i64) {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -111,21 +109,20 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: sub sp, sp, x16, UXTX
|
||||
; nextln: mov x1, sp
|
||||
; nextln: str x0, [x1]
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: add sp, sp, x16, UXTX
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; mov x2, sp
|
||||
; str x0, [x2]
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
; Force a b1 to be spilled into a slot at an SP offset between 0x100 and
|
||||
; 0x1fff, to exercise the scaled addressing mode.
|
||||
function %b1_spill_slot(b1) -> b1, i64 {
|
||||
ss0 = explicit_slot 1000
|
||||
|
||||
@@ -277,7 +274,161 @@ block0(v0: b1):
|
||||
return v0, v137
|
||||
}
|
||||
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; stp x27, x28, [sp, #-16]!
|
||||
; stp x25, x26, [sp, #-16]!
|
||||
; stp x23, x24, [sp, #-16]!
|
||||
; stp x21, x22, [sp, #-16]!
|
||||
; stp x19, x20, [sp, #-16]!
|
||||
; sub sp, sp, #1152
|
||||
; block0:
|
||||
; str x0, [sp, #1000]
|
||||
; movz x8, #2
|
||||
; add x11, x8, #1
|
||||
; str x11, [sp, #1136]
|
||||
; movz x8, #4
|
||||
; add x12, x8, #3
|
||||
; str x12, [sp, #1128]
|
||||
; movz x8, #6
|
||||
; add x13, x8, #5
|
||||
; str x13, [sp, #1120]
|
||||
; movz x8, #8
|
||||
; add x14, x8, #7
|
||||
; str x14, [sp, #1112]
|
||||
; movz x8, #10
|
||||
; add x15, x8, #9
|
||||
; str x15, [sp, #1104]
|
||||
; movz x8, #12
|
||||
; add x1, x8, #11
|
||||
; str x1, [sp, #1096]
|
||||
; movz x8, #14
|
||||
; add x2, x8, #13
|
||||
; str x2, [sp, #1088]
|
||||
; movz x8, #16
|
||||
; add x3, x8, #15
|
||||
; str x3, [sp, #1080]
|
||||
; movz x8, #18
|
||||
; add x4, x8, #17
|
||||
; str x4, [sp, #1072]
|
||||
; movz x8, #20
|
||||
; add x5, x8, #19
|
||||
; str x5, [sp, #1064]
|
||||
; movz x8, #22
|
||||
; add x6, x8, #21
|
||||
; str x6, [sp, #1056]
|
||||
; movz x8, #24
|
||||
; add x7, x8, #23
|
||||
; str x7, [sp, #1048]
|
||||
; movz x8, #26
|
||||
; add x8, x8, #25
|
||||
; str x8, [sp, #1040]
|
||||
; movz x8, #28
|
||||
; add x9, x8, #27
|
||||
; str x9, [sp, #1032]
|
||||
; movz x8, #30
|
||||
; add x26, x8, #29
|
||||
; str x26, [sp, #1024]
|
||||
; movz x8, #32
|
||||
; add x27, x8, #31
|
||||
; str x27, [sp, #1016]
|
||||
; movz x8, #34
|
||||
; add x28, x8, #33
|
||||
; movz x8, #36
|
||||
; add x21, x8, #35
|
||||
; str x21, [sp, #1008]
|
||||
; movz x8, #38
|
||||
; add x21, x8, #37
|
||||
; movz x8, #30
|
||||
; add x19, x8, #39
|
||||
; movz x8, #32
|
||||
; add x20, x8, #31
|
||||
; movz x8, #34
|
||||
; add x22, x8, #33
|
||||
; movz x8, #36
|
||||
; add x23, x8, #35
|
||||
; movz x8, #38
|
||||
; add x24, x8, #37
|
||||
; movz x8, #30
|
||||
; add x25, x8, #39
|
||||
; movz x8, #32
|
||||
; add x0, x8, #31
|
||||
; movz x8, #34
|
||||
; add x10, x8, #33
|
||||
; movz x8, #36
|
||||
; add x11, x8, #35
|
||||
; movz x8, #38
|
||||
; add x12, x8, #37
|
||||
; movz x8, #30
|
||||
; add x13, x8, #39
|
||||
; movz x8, #32
|
||||
; add x14, x8, #31
|
||||
; movz x8, #34
|
||||
; add x15, x8, #33
|
||||
; movz x8, #36
|
||||
; add x1, x8, #35
|
||||
; movz x8, #38
|
||||
; add x2, x8, #37
|
||||
; ldr x3, [sp, #1136]
|
||||
; add x3, x3, #39
|
||||
; ldr x5, [sp, #1120]
|
||||
; ldr x4, [sp, #1128]
|
||||
; add x4, x4, x5
|
||||
; ldr x5, [sp, #1104]
|
||||
; ldr x8, [sp, #1112]
|
||||
; add x5, x8, x5
|
||||
; ldr x6, [sp, #1088]
|
||||
; ldr x7, [sp, #1096]
|
||||
; add x6, x7, x6
|
||||
; ldr x7, [sp, #1072]
|
||||
; ldr x8, [sp, #1080]
|
||||
; add x7, x8, x7
|
||||
; ldr x9, [sp, #1056]
|
||||
; ldr x8, [sp, #1064]
|
||||
; add x8, x8, x9
|
||||
; ldr x9, [sp, #1040]
|
||||
; ldr x26, [sp, #1048]
|
||||
; add x9, x26, x9
|
||||
; ldr x26, [sp, #1024]
|
||||
; ldr x27, [sp, #1032]
|
||||
; add x26, x27, x26
|
||||
; ldr x27, [sp, #1016]
|
||||
; add x27, x27, x28
|
||||
; ldr x28, [sp, #1008]
|
||||
; add x28, x28, x21
|
||||
; add x21, x19, x20
|
||||
; add x19, x22, x23
|
||||
; add x25, x24, x25
|
||||
; add x10, x0, x10
|
||||
; add x11, x11, x12
|
||||
; add x12, x13, x14
|
||||
; add x13, x15, x1
|
||||
; add x14, x2, x3
|
||||
; add x15, x4, x5
|
||||
; add x0, x6, x7
|
||||
; add x9, x8, x9
|
||||
; add x1, x26, x27
|
||||
; add x2, x28, x21
|
||||
; add x3, x19, x25
|
||||
; add x10, x10, x11
|
||||
; add x11, x12, x13
|
||||
; add x12, x14, x15
|
||||
; add x9, x0, x9
|
||||
; add x13, x1, x2
|
||||
; add x10, x3, x10
|
||||
; add x11, x11, x12
|
||||
; add x9, x9, x13
|
||||
; add x10, x10, x11
|
||||
; add x1, x9, x10
|
||||
; ldr x0, [sp, #1000]
|
||||
; add sp, sp, #1152
|
||||
; ldp x19, x20, [sp], #16
|
||||
; ldp x21, x22, [sp], #16
|
||||
; ldp x23, x24, [sp], #16
|
||||
; ldp x25, x26, [sp], #16
|
||||
; ldp x27, x28, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_store(i128) {
|
||||
ss0 = explicit_slot 16
|
||||
@@ -286,15 +437,16 @@ block0(v0: i128):
|
||||
stack_store.i128 v0, ss0
|
||||
return
|
||||
}
|
||||
; TODO: Codegen improvement opportunities: This should be just a stp x0, x1, [sp, #-16]
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: mov x2, sp
|
||||
; nextln: stp x0, x1, [x2]
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; mov x4, sp
|
||||
; stp x0, x1, [x4]
|
||||
; add sp, sp, #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_store_inst_offset(i128) {
|
||||
ss0 = explicit_slot 16
|
||||
@@ -304,15 +456,16 @@ block0(v0: i128):
|
||||
stack_store.i128 v0, ss1+16
|
||||
return
|
||||
}
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #32
|
||||
; nextln: add x2, sp, #32
|
||||
; nextln: stp x0, x1, [x2]
|
||||
; nextln: add sp, sp, #32
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add x4, sp, #32
|
||||
; stp x0, x1, [x4]
|
||||
; add sp, sp, #32
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_store_big(i128) {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -322,20 +475,20 @@ block0(v0: i128):
|
||||
stack_store.i128 v0, ss0
|
||||
return
|
||||
}
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: sub sp, sp, x16, UXTX
|
||||
; nextln: mov x2, sp
|
||||
; nextln: stp x0, x1, [x2]
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: add sp, sp, x16, UXTX
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; mov x4, sp
|
||||
; stp x0, x1, [x4]
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_load() -> i128 {
|
||||
ss0 = explicit_slot 16
|
||||
@@ -344,20 +497,16 @@ block0:
|
||||
v0 = stack_load.i128 ss0
|
||||
return v0
|
||||
}
|
||||
; TODO: Codegen improvement opportunities: This should be just a ldp x0, x1, [sp, #-16]
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #16
|
||||
; nextln: mov x0, sp
|
||||
; nextln: ldp x1, x0, [x0]
|
||||
; nextln: mov x2, x0
|
||||
; nextln: mov x0, x1
|
||||
; nextln: mov x1, x2
|
||||
; nextln: add sp, sp, #16
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #16
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; ldp x0, x1, [x0]
|
||||
; add sp, sp, #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_load_inst_offset() -> i128 {
|
||||
ss0 = explicit_slot 16
|
||||
@@ -367,19 +516,16 @@ block0:
|
||||
v0 = stack_load.i128 ss1+16
|
||||
return v0
|
||||
}
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: sub sp, sp, #32
|
||||
; nextln: add x0, sp, #32
|
||||
; nextln: ldp x1, x0, [x0]
|
||||
; nextln: mov x2, x0
|
||||
; nextln: mov x0, x1
|
||||
; nextln: mov x1, x2
|
||||
; nextln: add sp, sp, #32
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; sub sp, sp, #32
|
||||
; block0:
|
||||
; add x0, sp, #32
|
||||
; ldp x0, x1, [x0]
|
||||
; add sp, sp, #32
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
function %i128_stack_load_big() -> i128 {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -389,18 +535,18 @@ block0:
|
||||
v0 = stack_load.i128 ss0
|
||||
return v0
|
||||
}
|
||||
; check: stp fp, lr, [sp, #-16]!
|
||||
; nextln: mov fp, sp
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: sub sp, sp, x16, UXTX
|
||||
; nextln: mov x0, sp
|
||||
; nextln: ldp x1, x0, [x0]
|
||||
; nextln: mov x2, x0
|
||||
; nextln: mov x0, x1
|
||||
; nextln: mov x1, x2
|
||||
; nextln: movz w16, #34480
|
||||
; nextln: movk w16, #1, LSL #16
|
||||
; nextln: add sp, sp, x16, UXTX
|
||||
; nextln: ldp fp, lr, [sp], #16
|
||||
; nextln: ret
|
||||
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; sub sp, sp, x16, UXTX
|
||||
; block0:
|
||||
; mov x0, sp
|
||||
; ldp x0, x1, [x0]
|
||||
; movz w16, #34480
|
||||
; movk w16, #1, LSL #16
|
||||
; add sp, sp, x16, UXTX
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,12 +10,7 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: ldr x0, 8 ; b 12 ; data TestCase { length: 9, ascii: [109, 121, 95, 103, 108, 111, 98, 97, 108, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; ldr x0, 8 ; b 12 ; data TestCase { length: 9, ascii: [109, 121, 95, 103, 108, 111, 98, 97, 108, 0, 0, 0, 0, 0, 0, 0] } + 0
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,28 +10,23 @@ block0(v0: i32):
|
||||
return v0, v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 18)
|
||||
; Inst 0: stp fp, lr, [sp, #-16]!
|
||||
; Inst 1: mov fp, sp
|
||||
; Inst 2: str x19, [sp, #-16]!
|
||||
; Inst 3: stp d14, d15, [sp, #-16]!
|
||||
; Inst 4: stp d12, d13, [sp, #-16]!
|
||||
; Inst 5: stp d10, d11, [sp, #-16]!
|
||||
; Inst 6: stp d8, d9, [sp, #-16]!
|
||||
; Inst 7: mov x19, x0
|
||||
; Inst 8: elf_tls_get_addr u1:0
|
||||
; Inst 9: mov x1, x0
|
||||
; Inst 10: mov x0, x19
|
||||
; Inst 11: ldp d8, d9, [sp], #16
|
||||
; Inst 12: ldp d10, d11, [sp], #16
|
||||
; Inst 13: ldp d12, d13, [sp], #16
|
||||
; Inst 14: ldp d14, d15, [sp], #16
|
||||
; Inst 15: ldr x19, [sp], #16
|
||||
; Inst 16: ldp fp, lr, [sp], #16
|
||||
; Inst 17: ret
|
||||
; }}
|
||||
; stp fp, lr, [sp, #-16]!
|
||||
; mov fp, sp
|
||||
; str x25, [sp, #-16]!
|
||||
; stp d14, d15, [sp, #-16]!
|
||||
; stp d12, d13, [sp, #-16]!
|
||||
; stp d10, d11, [sp, #-16]!
|
||||
; stp d8, d9, [sp, #-16]!
|
||||
; block0:
|
||||
; mov x25, x0
|
||||
; elf_tls_get_addr u1:0
|
||||
; mov x1, x0
|
||||
; mov x0, x25
|
||||
; ldp d8, d9, [sp], #16
|
||||
; ldp d10, d11, [sp], #16
|
||||
; ldp d12, d13, [sp], #16
|
||||
; ldp d14, d15, [sp], #16
|
||||
; ldr x25, [sp], #16
|
||||
; ldp fp, lr, [sp], #16
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,13 +7,8 @@ block0:
|
||||
trap user0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 1)
|
||||
; Inst 0: udf
|
||||
; }}
|
||||
; block0:
|
||||
; udf
|
||||
|
||||
function %g(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -23,15 +18,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 3)
|
||||
; Inst 0: subs xzr, x0, #42
|
||||
; Inst 1: b.ne 8 ; udf
|
||||
; Inst 2: ret
|
||||
; }}
|
||||
; block0:
|
||||
; subs xzr, x0, #42
|
||||
; b.ne 8 ; udf
|
||||
; ret
|
||||
|
||||
function %h() {
|
||||
block0:
|
||||
@@ -39,12 +29,7 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: brk #0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; brk #0
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,14 +8,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w0, w0
|
||||
; ret
|
||||
|
||||
function %f_u_8_32(i8) -> i32 {
|
||||
block0(v0: i8):
|
||||
@@ -23,14 +18,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w0, w0
|
||||
; ret
|
||||
|
||||
function %f_u_8_16(i8) -> i16 {
|
||||
block0(v0: i8):
|
||||
@@ -38,14 +28,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uxtb w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxtb w0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_8_64(i8) -> i64 {
|
||||
block0(v0: i8):
|
||||
@@ -53,14 +38,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxtb x0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb x0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_8_32(i8) -> i32 {
|
||||
block0(v0: i8):
|
||||
@@ -68,14 +48,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxtb w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb w0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_8_16(i8) -> i16 {
|
||||
block0(v0: i8):
|
||||
@@ -83,14 +58,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxtb w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtb w0, w0
|
||||
; ret
|
||||
|
||||
function %f_u_16_64(i16) -> i64 {
|
||||
block0(v0: i16):
|
||||
@@ -98,14 +68,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w0, w0
|
||||
; ret
|
||||
|
||||
function %f_u_16_32(i16) -> i32 {
|
||||
block0(v0: i16):
|
||||
@@ -113,14 +78,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: uxth w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; uxth w0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_16_64(i16) -> i64 {
|
||||
block0(v0: i16):
|
||||
@@ -128,14 +88,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxth x0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxth x0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_16_32(i16) -> i32 {
|
||||
block0(v0: i16):
|
||||
@@ -143,14 +98,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxth w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxth w0, w0
|
||||
; ret
|
||||
|
||||
function %f_u_32_64(i32) -> i64 {
|
||||
block0(v0: i32):
|
||||
@@ -158,14 +108,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: mov w0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; mov w0, w0
|
||||
; ret
|
||||
|
||||
function %f_s_32_64(i32) -> i64 {
|
||||
block0(v0: i32):
|
||||
@@ -173,12 +118,7 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 2)
|
||||
; Inst 0: sxtw x0, w0
|
||||
; Inst 1: ret
|
||||
; }}
|
||||
; block0:
|
||||
; sxtw x0, w0
|
||||
; ret
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,11 +11,12 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r2
|
||||
; nextln: lrvgr %r3, %r3
|
||||
; nextln: csg %r2, %r3, 0(%r4)
|
||||
; nextln: lrvgr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r2
|
||||
; lrvgr %r3, %r3
|
||||
; csg %r5, %r3, 0(%r4)
|
||||
; lrvgr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i32(i32, i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i64):
|
||||
@@ -23,11 +24,12 @@ block0(v0: i32, v1: i32, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r2
|
||||
; nextln: lrvr %r3, %r3
|
||||
; nextln: cs %r2, %r3, 0(%r4)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r2
|
||||
; lrvr %r3, %r3
|
||||
; cs %r5, %r3, 0(%r4)
|
||||
; lrvr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i16(i64, i16, i16, i64) -> i16 {
|
||||
block0(v0: i64, v1: i16, v2: i16, v3: i64):
|
||||
@@ -35,15 +37,20 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r5, 3
|
||||
; nextln: nill %r5, 65532
|
||||
; nextln: lrvr %r3, %r3
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r5)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rxsbg %r1, %r3, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; stmg %r6, %r15, 48(%r15)
|
||||
; block0:
|
||||
; lgr %r6, %r3
|
||||
; sllk %r3, %r5, 3
|
||||
; nill %r5, 65532
|
||||
; lgr %r2, %r6
|
||||
; lrvr %r2, %r2
|
||||
; lrvr %r4, %r4
|
||||
; l %r0, 0(%r5)
|
||||
; 0: rll %r1, %r0, 16(%r3) ; rxsbg %r1, %r2, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r3) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r3)
|
||||
; lrvr %r2, %r2
|
||||
; lmg %r6, %r15, 48(%r15)
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i8(i64, i8, i8, i64) -> i8 {
|
||||
block0(v0: i64, v1: i8, v2: i8, v3: i64):
|
||||
@@ -51,13 +58,14 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: sllk %r2, %r5, 3
|
||||
; nextln: nill %r5, 65532
|
||||
; nextln: lcr %r14, %r2
|
||||
; nextln: l %r0, 0(%r5)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r14) ; cs %r0, %r1, 0(%r5) ; jglh 0b
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: lmg %r14, %r15, 112(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r12, %r15, 96(%r15)
|
||||
; block0:
|
||||
; sllk %r2, %r5, 3
|
||||
; nill %r5, 65532
|
||||
; lcr %r12, %r2
|
||||
; l %r0, 0(%r5)
|
||||
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r12) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r2)
|
||||
; lmg %r12, %r15, 96(%r15)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,8 +11,9 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: csg %r2, %r3, 0(%r4)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; csg %r2, %r3, 0(%r4)
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i32(i32, i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i64):
|
||||
@@ -20,8 +21,9 @@ block0(v0: i32, v1: i32, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cs %r2, %r3, 0(%r4)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cs %r2, %r3, 0(%r4)
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i16(i64, i16, i16, i64) -> i16 {
|
||||
block0(v0: i64, v1: i16, v2: i16, v3: i64):
|
||||
@@ -29,12 +31,13 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r5, 3
|
||||
; nextln: nill %r5, 65532
|
||||
; nextln: l %r0, 0(%r5)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r2, %r5, 3
|
||||
; nill %r5, 65532
|
||||
; l %r0, 0(%r5)
|
||||
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_cas_i8(i64, i8, i8, i64) -> i8 {
|
||||
block0(v0: i64, v1: i8, v2: i8, v3: i64):
|
||||
@@ -42,13 +45,14 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
|
||||
return v4
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: sllk %r2, %r5, 3
|
||||
; nextln: nill %r5, 65532
|
||||
; nextln: lcr %r14, %r2
|
||||
; nextln: l %r0, 0(%r5)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r14) ; cs %r0, %r1, 0(%r5) ; jglh 0b
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: lmg %r14, %r15, 112(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r12, %r15, 96(%r15)
|
||||
; block0:
|
||||
; sllk %r2, %r5, 3
|
||||
; nill %r5, 65532
|
||||
; lcr %r12, %r2
|
||||
; l %r0, 0(%r5)
|
||||
; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r12) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r2)
|
||||
; lmg %r12, %r15, 96(%r15)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %atomic_load_i64(i64) -> i64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvg %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvg %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -27,8 +29,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrv %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrv %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -38,8 +41,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -47,8 +51,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i16_sym() -> i16 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -58,8 +63,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i8(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
@@ -67,6 +73,7 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %atomic_load_i64(i64) -> i64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lg %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -27,8 +29,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: l %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -38,8 +41,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -47,8 +51,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i16_sym() -> i16 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -58,8 +63,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llhrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_load_i8(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
@@ -67,6 +73,7 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x arch13
|
||||
|
||||
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
|
||||
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: nngrk %r1, %r0, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: nngrk %r1, %r0, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -18,10 +19,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: nnrk %r1, %r0, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: nnrk %r1, %r0, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -29,12 +31,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -42,13 +45,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -56,11 +60,12 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: lg %r0, 0(%r3)
|
||||
; nextln: 0: nngrk %r1, %r0, %r2 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: nngrk %r1, %r0, %r5 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -68,11 +73,12 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: nnrk %r1, %r0, %r2 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: nnrk %r1, %r0, %r5 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -80,14 +86,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -95,11 +102,12 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,11 +11,12 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: lg %r0, 0(%r3)
|
||||
; nextln: 0: csg %r0, %r2, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: csg %r0, %r5, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -23,11 +24,12 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: cs %r0, %r2, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: cs %r0, %r5, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -35,14 +37,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; risbgn %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -50,18 +53,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (ADD)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -69,10 +68,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; agr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; agr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -80,10 +80,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; ar %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; ar %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -91,14 +92,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; ar %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; ar %r1, %r2 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -106,18 +108,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SUB)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -125,10 +124,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; sgr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; sgr %r1, %r4 ; lrvgr %r1, %r1 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -136,10 +136,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; sr %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; sr %r1, %r4 ; lrvr %r1, %r1 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -147,14 +148,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; sr %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; sr %r1, %r2 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -162,18 +164,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (AND)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -181,10 +180,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: lang %r2, %r2, 0(%r3)
|
||||
; nextln: lrvgr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; lang %r3, %r5, 0(%r3)
|
||||
; lrvgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -192,10 +192,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: lan %r2, %r2, 0(%r3)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; lan %r3, %r5, 0(%r3)
|
||||
; lrvr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -203,14 +204,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -218,17 +220,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (OR)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -236,10 +235,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: laog %r2, %r2, 0(%r3)
|
||||
; nextln: lrvgr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; laog %r3, %r5, 0(%r3)
|
||||
; lrvgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -247,10 +247,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: lao %r2, %r2, 0(%r3)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; lao %r3, %r5, 0(%r3)
|
||||
; lrvr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -258,14 +259,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rosbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; rosbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -273,18 +275,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (XOR)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -292,10 +290,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: laxg %r2, %r2, 0(%r3)
|
||||
; nextln: lrvgr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; laxg %r3, %r5, 0(%r3)
|
||||
; lrvgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -303,10 +302,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: lax %r2, %r2, 0(%r3)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; lax %r3, %r5, 0(%r3)
|
||||
; lrvr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -314,14 +314,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rxsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; rxsbg %r1, %r2, 48, 64, 48 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -329,17 +330,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (NAND)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -347,11 +345,12 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvgr %r2, %r4
|
||||
; nextln: lg %r0, 0(%r3)
|
||||
; nextln: 0: ngrk %r1, %r0, %r2 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvgr %r5, %r4
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: ngrk %r1, %r0, %r5 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -359,11 +358,12 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lrvr %r2, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: nrk %r1, %r0, %r2 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvr %r5, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: nrk %r1, %r0, %r5 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -371,14 +371,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lrvr %r4, %r4
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lrvr %r2, %r4
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; rnsbg %r1, %r2, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -386,17 +387,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SMIN)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -404,10 +402,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -415,10 +414,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -426,14 +426,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -441,18 +442,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SMAX)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -460,10 +458,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; cgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -471,10 +470,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; cr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -482,14 +482,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -497,18 +498,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (UMIN)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -516,10 +514,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnl 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -527,10 +526,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnl 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -538,14 +538,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -553,18 +554,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (UMAX)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -572,10 +570,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: lrvgr %r1, %r0 ; clgr %r4, %r1 ; jgnh 1f ; lrvgr %r1, %r4 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -583,10 +582,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lrvr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: lrvr %r1, %r0 ; clr %r4, %r1 ; jgnh 1f ; lrvr %r1, %r4 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lrvr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -594,14 +594,15 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 0(%r2)
|
||||
; nextln: lrvr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 16(%r5) ; lrvr %r1, %r1 ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 0(%r5)
|
||||
; lrvr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -609,12 +610,13 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,10 +11,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -22,10 +23,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -33,12 +35,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -46,17 +49,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (ADD)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -64,8 +64,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: laag %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; laag %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i32(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -73,8 +74,9 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: laa %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; laa %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -82,13 +84,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_add_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -96,18 +99,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SUB)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; ar %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -115,9 +115,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lcgr %r3, %r3
|
||||
; nextln: laag %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcgr %r3, %r3
|
||||
; laag %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i32(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -125,9 +126,10 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lcr %r3, %r3
|
||||
; nextln: laa %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcr %r3, %r3
|
||||
; laa %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -135,13 +137,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -149,18 +152,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (AND)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; sr %r1, %r2 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -168,8 +168,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lang %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lang %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i32(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -177,8 +178,9 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lan %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lan %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -186,12 +188,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_and_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -199,17 +202,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (OR)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -217,8 +217,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: laog %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; laog %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i32(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -226,8 +227,9 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lao %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lao %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -235,12 +237,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_or_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -248,17 +251,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (XOR)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -266,8 +266,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: laxg %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; laxg %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i32(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -275,8 +276,9 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lax %r2, %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lax %r2, %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -284,12 +286,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -297,17 +300,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (NAND)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -315,10 +315,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: ngrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: ngrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; xihf %r1, 4294967295 ; csg %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -326,10 +327,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: nrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: nrk %r1, %r0, %r4 ; xilf %r1, 4294967295 ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -337,12 +339,13 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -350,17 +353,14 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SMIN)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; lcr %r2, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -368,10 +368,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: cgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: cgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -379,10 +380,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: cr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: cr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -390,13 +392,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -404,18 +407,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (SMAX)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -423,10 +423,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: cgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: cgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -434,10 +435,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: cr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: cr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -445,13 +447,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -459,18 +462,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (UMIN)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; cr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -478,10 +478,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: clgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: clgr %r4, %r0 ; jgnl 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -489,10 +490,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: clr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: clr %r4, %r0 ; jgnl 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -500,13 +502,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -514,18 +517,15 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ATOMIC_RMW (UMAX)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnl 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -533,10 +533,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lg %r0, 0(%r3)
|
||||
; nextln: 0: clgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r0, 0(%r3)
|
||||
; 0: clgr %r4, %r0 ; jgnh 1f ; csg %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i32(i64, i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i64, v2: i32):
|
||||
@@ -544,10 +545,11 @@ block0(v0: i64, v1: i64, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: l %r0, 0(%r3)
|
||||
; nextln: 0: clr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r0, 0(%r3)
|
||||
; 0: clr %r4, %r0 ; jgnh 1f ; cs %r0, %r4, 0(%r3) ; jglh 0b ; 1:
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i16(i64, i64, i16) -> i16 {
|
||||
block0(v0: i64, v1: i64, v2: i16):
|
||||
@@ -555,13 +557,14 @@ block0(v0: i64, v1: i64, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 16
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 16(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 16
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 48, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 16(%r5)
|
||||
; br %r14
|
||||
|
||||
function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
@@ -569,12 +572,13 @@ block0(v0: i64, v1: i64, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 3
|
||||
; nextln: nill %r3, 65532
|
||||
; nextln: sllk %r4, %r4, 24
|
||||
; nextln: lcr %r5, %r2
|
||||
; nextln: l %r0, 0(%r3)
|
||||
; nextln: 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; nextln: rll %r2, %r0, 8(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r3, 3
|
||||
; nill %r3, 65532
|
||||
; sllk %r2, %r4, 24
|
||||
; lcr %r4, %r5
|
||||
; l %r0, 0(%r3)
|
||||
; 0: rll %r1, %r0, 0(%r5) ; clr %r2, %r1 ; jgnh 1f ; risbgn %r1, %r2, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1:
|
||||
; rll %r2, %r0, 8(%r5)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %atomic_store_i64(i64, i64) {
|
||||
@@ -7,9 +7,10 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvg %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvg %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -19,9 +20,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -30,10 +32,11 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lghi %r3, 12345
|
||||
; nextln: strvg %r3, 0(%r2)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r4, 12345
|
||||
; strvg %r4, 0(%r2)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -41,9 +44,10 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strv %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strv %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -53,9 +57,10 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -64,10 +69,11 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lhi %r3, 12345
|
||||
; nextln: strv %r3, 0(%r2)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r4, 12345
|
||||
; strv %r4, 0(%r2)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -75,9 +81,10 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvh %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvh %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i16_sym(i16) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -87,9 +94,10 @@ block0(v0: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -98,9 +106,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 14640
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 14640
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i8(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -108,9 +117,10 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i8(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -119,7 +129,8 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %atomic_store_i64(i64, i64) {
|
||||
@@ -7,9 +7,10 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stg %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stg %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -19,9 +20,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stgrl %r2, %sym + 0
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stgrl %r2, %sym + 0
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -30,9 +32,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvghi 0(%r2), 12345
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvghi 0(%r2), 12345
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -40,9 +43,10 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: st %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; st %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -52,9 +56,10 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strl %r2, %sym + 0
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strl %r2, %sym + 0
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -63,9 +68,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhi 0(%r2), 12345
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhi 0(%r2), 12345
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -73,9 +79,10 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sth %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sth %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i16_sym(i16) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -85,9 +92,10 @@ block0(v0: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sthrl %r2, %sym + 0
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sthrl %r2, %sym + 0
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -96,9 +104,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 12345
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 12345
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_i8(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -106,9 +115,10 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
function %atomic_store_imm_i8(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -117,7 +127,8 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x arch13
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,8 +11,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2, 8
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r2, %r2, 8
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -20,9 +21,10 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgfr %r2, %r2
|
||||
; nextln: popcnt %r2, %r2, 8
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgfr %r5, %r2
|
||||
; popcnt %r2, %r5, 8
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -30,9 +32,10 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llghr %r2, %r2
|
||||
; nextln: popcnt %r2, %r2, 8
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llghr %r5, %r2
|
||||
; popcnt %r2, %r5, 8
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -40,5 +43,7 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r2, %r2
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -42,9 +42,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: flogr %r0, %r2
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; flogr %r0, %r2
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %clz_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -52,10 +53,11 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgfr %r2, %r2
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -32
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgfr %r5, %r2
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -32
|
||||
; br %r14
|
||||
|
||||
function %clz_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -63,10 +65,11 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llghr %r2, %r2
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -48
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llghr %r5, %r2
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -48
|
||||
; br %r14
|
||||
|
||||
function %clz_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -74,14 +77,11 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgcr %r2, %r2
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -56
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; CLS
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llgcr %r5, %r2
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -56
|
||||
; br %r14
|
||||
|
||||
function %cls_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -89,11 +89,12 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: srag %r3, %r2, 63
|
||||
; nextln: xgr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srag %r5, %r2, 63
|
||||
; xgrk %r3, %r2, %r5
|
||||
; flogr %r0, %r3
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %cls_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -101,12 +102,13 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgfr %r2, %r2
|
||||
; nextln: srag %r3, %r2, 63
|
||||
; nextln: xgr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -32
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r5, %r2
|
||||
; srag %r3, %r5, 63
|
||||
; xgr %r5, %r3
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -32
|
||||
; br %r14
|
||||
|
||||
function %cls_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -114,12 +116,13 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghr %r2, %r2
|
||||
; nextln: srag %r3, %r2, 63
|
||||
; nextln: xgr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -48
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r5, %r2
|
||||
; srag %r3, %r5, 63
|
||||
; xgr %r5, %r3
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -48
|
||||
; br %r14
|
||||
|
||||
function %cls_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -127,16 +130,13 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgbr %r2, %r2
|
||||
; nextln: srag %r3, %r2, 63
|
||||
; nextln: xgr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: ahik %r2, %r0, -56
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; CTZ
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lgbr %r5, %r2
|
||||
; srag %r3, %r5, 63
|
||||
; xgr %r5, %r3
|
||||
; flogr %r0, %r5
|
||||
; ahik %r2, %r0, -56
|
||||
; br %r14
|
||||
|
||||
function %ctz_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -144,13 +144,14 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lcgr %r3, %r2
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: locghie %r0, -1
|
||||
; nextln: lghi %r2, 63
|
||||
; nextln: sgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcgr %r5, %r2
|
||||
; ngrk %r3, %r2, %r5
|
||||
; flogr %r0, %r3
|
||||
; locghie %r0, -1
|
||||
; lghi %r3, 63
|
||||
; sgrk %r2, %r3, %r0
|
||||
; br %r14
|
||||
|
||||
function %ctz_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -158,13 +159,14 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: oihl %r2, 1
|
||||
; nextln: lcgr %r3, %r2
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: lhi %r2, 63
|
||||
; nextln: sr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; oihl %r2, 1
|
||||
; lcgr %r4, %r2
|
||||
; ngr %r2, %r4
|
||||
; flogr %r0, %r2
|
||||
; lhi %r5, 63
|
||||
; srk %r2, %r5, %r0
|
||||
; br %r14
|
||||
|
||||
function %ctz_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -172,13 +174,14 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: oilh %r2, 1
|
||||
; nextln: lcgr %r3, %r2
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: lhi %r2, 63
|
||||
; nextln: sr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; oilh %r2, 1
|
||||
; lcgr %r4, %r2
|
||||
; ngr %r2, %r4
|
||||
; flogr %r0, %r2
|
||||
; lhi %r5, 63
|
||||
; srk %r2, %r5, %r0
|
||||
; br %r14
|
||||
|
||||
function %ctz_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -186,17 +189,14 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: oill %r2, 256
|
||||
; nextln: lcgr %r3, %r2
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: flogr %r0, %r2
|
||||
; nextln: lhi %r2, 63
|
||||
; nextln: sr %r2, %r0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; POPCNT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; oill %r2, 256
|
||||
; lcgr %r4, %r2
|
||||
; ngr %r2, %r4
|
||||
; flogr %r0, %r2
|
||||
; lhi %r5, 63
|
||||
; srk %r2, %r5, %r0
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -204,15 +204,16 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2
|
||||
; nextln: sllg %r3, %r2, 32
|
||||
; nextln: agr %r2, %r3
|
||||
; nextln: sllg %r3, %r2, 16
|
||||
; nextln: agr %r2, %r3
|
||||
; nextln: sllg %r3, %r2, 8
|
||||
; nextln: agr %r2, %r3
|
||||
; nextln: srlg %r2, %r2, 56
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r5, %r2
|
||||
; sllg %r3, %r5, 32
|
||||
; agr %r5, %r3
|
||||
; sllg %r3, %r5, 16
|
||||
; agr %r5, %r3
|
||||
; sllg %r3, %r5, 8
|
||||
; agr %r5, %r3
|
||||
; srlg %r2, %r5, 56
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -220,13 +221,14 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 16
|
||||
; nextln: ar %r2, %r3
|
||||
; nextln: sllk %r3, %r2, 8
|
||||
; nextln: ar %r2, %r3
|
||||
; nextln: srlk %r2, %r2, 24
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r5, %r2
|
||||
; sllk %r3, %r5, 16
|
||||
; ar %r5, %r3
|
||||
; sllk %r3, %r5, 8
|
||||
; ar %r5, %r3
|
||||
; srlk %r2, %r5, 24
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -234,11 +236,12 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 8
|
||||
; nextln: ar %r2, %r3
|
||||
; nextln: srlk %r2, %r2, 8
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r5, %r2
|
||||
; sllk %r3, %r5, 8
|
||||
; ar %r5, %r3
|
||||
; srlk %r2, %r5, 8
|
||||
; br %r14
|
||||
|
||||
function %popcnt_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -246,5 +249,7 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: popcnt %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; popcnt %r2, %r2
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x arch13
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -12,8 +12,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nngrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nngrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -21,8 +22,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nnrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nnrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -30,8 +32,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nnrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nnrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -39,12 +42,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nnrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BOR_NOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; nnrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -52,8 +52,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nogrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nogrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -61,8 +62,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nork %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -70,8 +72,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nork %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -79,12 +82,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BXOR_NOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; nork %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -92,8 +92,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nxgrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nxgrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -101,8 +102,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nxrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nxrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -110,8 +112,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nxrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nxrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -119,12 +122,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nxrk %r2, %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BNOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; nxrk %r2, %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bnot_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -132,8 +132,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nogrk %r2, %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nogrk %r2, %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bnot_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -141,8 +142,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nork %r2, %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bnot_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -150,8 +152,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nork %r2, %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bnot_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -159,12 +162,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nork %r2, %r2, %r2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BITSELECT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; nork %r2, %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -172,10 +172,11 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: ngr %r3, %r2
|
||||
; nextln: nngrk %r2, %r4, %r2
|
||||
; nextln: ogr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ngrk %r5, %r3, %r2
|
||||
; nngrk %r3, %r4, %r2
|
||||
; ogrk %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i32(i32, i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i32):
|
||||
@@ -183,10 +184,11 @@ block0(v0: i32, v1: i32, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nnrk %r2, %r4, %r2
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nnrk %r3, %r4, %r2
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i16(i16, i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16, v2: i16):
|
||||
@@ -194,10 +196,11 @@ block0(v0: i16, v1: i16, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nnrk %r2, %r4, %r2
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nnrk %r3, %r4, %r2
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i8(i8, i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8, v2: i8):
|
||||
@@ -205,8 +208,9 @@ block0(v0: i8, v1: i8, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nnrk %r2, %r4, %r2
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nnrk %r3, %r4, %r2
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
; FIXME: add immediate operand versions
|
||||
@@ -14,8 +14,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ngr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_i64_mem(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -24,8 +25,9 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: ng %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ng %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %band_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -33,8 +35,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_i32_mem(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -43,8 +46,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: n %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; n %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %band_i32_memoff(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -53,8 +57,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: ny %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ny %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %band_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -62,8 +67,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_i16_mem(i16, i64) -> i16 {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -72,9 +78,10 @@ block0(v0: i16, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llh %r3, 0(%r3)
|
||||
; nextln: nr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r4, 0(%r3)
|
||||
; nr %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %band_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -82,8 +89,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %band_i8_mem(i8, i64) -> i8 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -92,13 +100,10 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llc %r3, 0(%r3)
|
||||
; nextln: nr %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BOR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llc %r4, 0(%r3)
|
||||
; nr %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %bor_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -106,8 +111,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: ogr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ogr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_i64_mem(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -116,8 +122,9 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: og %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; og %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bor_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -125,8 +132,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_i32_mem(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -135,8 +143,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: o %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; o %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bor_i32_memoff(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -145,8 +154,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: oy %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; oy %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bor_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -154,8 +164,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_i16_mem(i16, i64) -> i16 {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -164,9 +175,10 @@ block0(v0: i16, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llh %r3, 0(%r3)
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r4, 0(%r3)
|
||||
; or %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %bor_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -174,8 +186,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bor_i8_mem(i8, i64) -> i8 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -184,13 +197,10 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llc %r3, 0(%r3)
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BXOR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llc %r4, 0(%r3)
|
||||
; or %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %bxor_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -198,8 +208,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xgr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_i64_mem(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -208,8 +219,9 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: xg %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xg %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bxor_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -217,8 +229,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_i32_mem(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -227,8 +240,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: x %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; x %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bxor_i32_memoff(i32, i64) -> i32 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -237,8 +251,9 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: xy %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xy %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %bxor_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -246,8 +261,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_i16_mem(i16, i64) -> i16 {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -256,9 +272,10 @@ block0(v0: i16, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llh %r3, 0(%r3)
|
||||
; nextln: xr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r4, 0(%r3)
|
||||
; xr %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %bxor_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -266,8 +283,9 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bxor_i8_mem(i8, i64) -> i8 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -276,13 +294,10 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llc %r3, 0(%r3)
|
||||
; nextln: xr %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BAND_NOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llc %r4, 0(%r3)
|
||||
; xr %r2, %r4
|
||||
; br %r14
|
||||
|
||||
function %band_not_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -290,10 +305,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: ngr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: xihf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ngr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; xihf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %band_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -301,9 +317,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %band_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -311,9 +328,10 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %band_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -321,13 +339,10 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BOR_NOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; nr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -335,10 +350,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: ogr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: xihf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ogr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; xihf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -346,9 +362,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -356,9 +373,10 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bor_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -366,13 +384,10 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: or %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BXOR_NOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; or %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -380,10 +395,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xgr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: xihf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xgr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; xihf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -391,9 +407,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -401,9 +418,10 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bxor_not_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -411,13 +429,10 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: xr %r2, %r3
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BNOT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; xr %r2, %r3
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bnot_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -425,9 +440,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: xilf %r2, 4294967295
|
||||
; nextln: xihf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xilf %r2, 4294967295
|
||||
; xihf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bnot_i32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -435,8 +451,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bnot_i16(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -444,8 +461,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bnot_i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -453,12 +471,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: xilf %r2, 4294967295
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BITSELECT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; xilf %r2, 4294967295
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i64(i64, i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64, v2: i64):
|
||||
@@ -466,12 +481,13 @@ block0(v0: i64, v1: i64, v2: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: ngr %r3, %r2
|
||||
; nextln: ngrk %r2, %r4, %r2
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: xihf %r2, 4294967295
|
||||
; nextln: ogr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ngrk %r5, %r3, %r2
|
||||
; ngrk %r3, %r4, %r2
|
||||
; xilf %r3, 4294967295
|
||||
; xihf %r3, 4294967295
|
||||
; ogrk %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i32(i32, i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32, v2: i32):
|
||||
@@ -479,11 +495,12 @@ block0(v0: i32, v1: i32, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nrk %r2, %r4, %r2
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nrk %r3, %r4, %r2
|
||||
; xilf %r3, 4294967295
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i16(i16, i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16, v2: i16):
|
||||
@@ -491,11 +508,12 @@ block0(v0: i16, v1: i16, v2: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nrk %r2, %r4, %r2
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nrk %r3, %r4, %r2
|
||||
; xilf %r3, 4294967295
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitselect_i8(i8, i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8, v2: i8):
|
||||
@@ -503,9 +521,10 @@ block0(v0: i8, v1: i8, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: nr %r3, %r2
|
||||
; nextln: nrk %r2, %r4, %r2
|
||||
; nextln: xilf %r2, 4294967295
|
||||
; nextln: or %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nrk %r5, %r3, %r2
|
||||
; nrk %r3, %r4, %r2
|
||||
; xilf %r3, 4294967295
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -13,13 +13,14 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; nextln: basr %r14, %r3
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; basr %r14, %r3
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %call_uext(i32) -> i64 {
|
||||
fn0 = %g(i32 uext) -> i64
|
||||
@@ -29,22 +30,24 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: llgfr %r2, %r2
|
||||
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; nextln: basr %r14, %r3
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; llgfr %r2, %r2
|
||||
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; basr %r14, %r3
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %ret_uext(i32) -> i32 uext {
|
||||
block0(v0: i32):
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgfr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %call_uext(i32) -> i64 {
|
||||
fn0 = %g(i32 sext) -> i64
|
||||
@@ -54,22 +57,24 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: lgfr %r2, %r2
|
||||
; nextln: bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; nextln: basr %r14, %r3
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; lgfr %r2, %r2
|
||||
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; basr %r14, %r3
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %ret_uext(i32) -> i32 sext {
|
||||
block0(v0: i32):
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %call_colocated(i64) -> i64 {
|
||||
fn0 = colocated %g(i64) -> i64
|
||||
@@ -79,12 +84,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: brasl %r14, %g
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; brasl %r14, %g
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %f2(i32) -> i64 {
|
||||
fn0 = %g(i32 uext) -> i64
|
||||
@@ -94,9 +100,15 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; CALL_INDIRECT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; llgfr %r2, %r2
|
||||
; bras %r1, 12 ; data %g + 0 ; lg %r3, 0(%r1)
|
||||
; basr %r14, %r3
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %call_indirect(i64, i64) -> i64 {
|
||||
sig0 = (i64) -> i64
|
||||
@@ -105,9 +117,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: basr %r14, %r3
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; basr %r14, %r3
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %f(i64, i64) -> b1 {
|
||||
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: clgr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochie %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochie %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %f(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -27,15 +28,15 @@ block2:
|
||||
return v5
|
||||
}
|
||||
|
||||
; check: Block 0:
|
||||
; check: clgr %r2, %r3
|
||||
; nextln: jge label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: lghi %r2, 1
|
||||
; nextln: br %r14
|
||||
; check: Block 2:
|
||||
; check: lghi %r2, 2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgr %r2, %r3
|
||||
; jge label1 ; jg label2
|
||||
; block1:
|
||||
; lghi %r2, 1
|
||||
; br %r14
|
||||
; block2:
|
||||
; lghi %r2, 2
|
||||
; br %r14
|
||||
|
||||
function %f(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -48,15 +49,14 @@ block1:
|
||||
return v4
|
||||
}
|
||||
|
||||
; FIXME: Should optimize away branches
|
||||
; block0:
|
||||
; clgr %r2, %r3
|
||||
; jge label1 ; jg label2
|
||||
; block1:
|
||||
; jg label3
|
||||
; block2:
|
||||
; jg label3
|
||||
; block3:
|
||||
; lghi %r2, 1
|
||||
; br %r14
|
||||
|
||||
; check: Block 0:
|
||||
; check: clgr %r2, %r3
|
||||
; nextln: jge label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: jg label3
|
||||
; check: Block 2:
|
||||
; check: jg label3
|
||||
; check: Block 3:
|
||||
; check: lghi %r2, 1
|
||||
; nextln: br %r14
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %f(i8, i64, i64) -> i64 {
|
||||
@@ -9,11 +9,12 @@ block0(v0: i8, v1: i64, v2: i64):
|
||||
return v5
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: clfi %r2, 42
|
||||
; nextln: locgre %r4, %r3
|
||||
; nextln: lgr %r2, %r4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; clfi %r5, 42
|
||||
; lgr %r2, %r4
|
||||
; locgre %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %g(b1, i8, i8) -> i8 {
|
||||
block0(v0: b1, v1: i8, v2: i8):
|
||||
@@ -21,13 +22,12 @@ block0(v0: b1, v1: i8, v2: i8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; FIXME: optimize i8/i16 compares
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: chi %r2, 0
|
||||
; nextln: locrlh %r4, %r3
|
||||
; nextln: lr %r2, %r4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; chi %r5, 0
|
||||
; lgr %r2, %r4
|
||||
; locrlh %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %i(i32, i8, i8) -> i8 {
|
||||
block0(v0: i32, v1: i8, v2: i8):
|
||||
@@ -37,7 +37,9 @@ block0(v0: i32, v1: i8, v2: i8):
|
||||
return v5
|
||||
}
|
||||
|
||||
; check: clfi %r2, 42
|
||||
; nextln: locre %r4, %r3
|
||||
; nextln: lr %r2, %r4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clfi %r2, 42
|
||||
; lgr %r2, %r4
|
||||
; locre %r2, %r3
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %f() -> b8 {
|
||||
@@ -7,8 +7,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lhi %r2, 255
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r2, 255
|
||||
; br %r14
|
||||
|
||||
function %f() -> b16 {
|
||||
block0:
|
||||
@@ -16,8 +17,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lhi %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -25,8 +27,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lghi %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -34,8 +37,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lgfi %r2, 65535
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfi %r2, 65535
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -43,8 +47,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llilh %r2, 65535
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llilh %r2, 65535
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -52,8 +57,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llihl %r2, 65535
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llihl %r2, 65535
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -61,8 +67,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llihh %r2, 65535
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llihh %r2, 65535
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -70,8 +77,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lghi %r2, -1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r2, -1
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
@@ -79,28 +87,31 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lgfi %r2, -65536
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfi %r2, -65536
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
v0 = iconst.i64 0xf34bf0a31212003a ; random digits
|
||||
v0 = iconst.i64 0xf34bf0a31212003a ;; random digits
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llihf %r2, 4081840291
|
||||
; nextln: iilf %r2, 303169594
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llihf %r2, 4081840291
|
||||
; iilf %r2, 303169594
|
||||
; br %r14
|
||||
|
||||
function %f() -> i64 {
|
||||
block0:
|
||||
v0 = iconst.i64 0x12e900001ef40000 ; random digits with 2 clear half words
|
||||
v0 = iconst.i64 0x12e900001ef40000 ;; random digits with 2 clear half words
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: llihh %r2, 4841
|
||||
; nextln: iilh %r2, 7924
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llihh %r2, 4841
|
||||
; iilh %r2, 7924
|
||||
; br %r14
|
||||
|
||||
function %f() -> i32 {
|
||||
block0:
|
||||
@@ -108,6 +119,7 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lhi %r2, -1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r2, -1
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,8 +11,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgfr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %uextend_i16_i64(i16) -> i64 {
|
||||
block0(v0: i16):
|
||||
@@ -20,8 +21,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llghr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %uextend_i16_i32(i16) -> i32 {
|
||||
block0(v0: i16):
|
||||
@@ -29,8 +31,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %uextend_i8_i64(i8) -> i64 {
|
||||
block0(v0: i8):
|
||||
@@ -38,8 +41,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgcr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgcr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %uextend_i8_i32(i8) -> i32 {
|
||||
block0(v0: i8):
|
||||
@@ -47,8 +51,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %uextend_i8_i16(i8) -> i16 {
|
||||
block0(v0: i8):
|
||||
@@ -56,13 +61,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: br %r14
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; SEXTEND
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llcr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i32_i64(i32) -> i64 {
|
||||
block0(v0: i32):
|
||||
@@ -70,8 +71,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i16_i64(i16) -> i64 {
|
||||
block0(v0: i16):
|
||||
@@ -79,8 +81,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i16_i32(i16) -> i32 {
|
||||
block0(v0: i16):
|
||||
@@ -88,8 +91,9 @@ block0(v0: i16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i8_i64(i8) -> i64 {
|
||||
block0(v0: i8):
|
||||
@@ -97,8 +101,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i8_i32(i8) -> i32 {
|
||||
block0(v0: i8):
|
||||
@@ -106,8 +111,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %sextend_i8_i16(i8) -> i16 {
|
||||
block0(v0: i8):
|
||||
@@ -115,13 +121,9 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; IREDUCE
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i64_i32(i64, i64) -> i32 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -129,8 +131,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i64_i16(i64, i64) -> i16 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -138,8 +141,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i64_i8(i64, i64) -> i8 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -147,8 +151,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i32_i16(i32, i32) -> i16 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -156,8 +161,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i32_i8(i32, i32) -> i8 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -165,8 +171,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %ireduce_i16_i8(i16, i16) -> i8 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -174,12 +181,9 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BEXTEND
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bextend_b32_b64(b32) -> b64 {
|
||||
block0(v0: b32):
|
||||
@@ -187,8 +191,9 @@ block0(v0: b32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b16_b64(b16) -> b64 {
|
||||
block0(v0: b16):
|
||||
@@ -196,8 +201,9 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b16_b32(b16) -> b32 {
|
||||
block0(v0: b16):
|
||||
@@ -205,8 +211,9 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b8_b64(b8) -> b64 {
|
||||
block0(v0: b8):
|
||||
@@ -214,8 +221,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b8_b32(b8) -> b32 {
|
||||
block0(v0: b8):
|
||||
@@ -223,8 +231,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b8_b16(b8) -> b16 {
|
||||
block0(v0: b8):
|
||||
@@ -232,8 +241,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r2, %r2
|
||||
; br %r14
|
||||
|
||||
function %bextend_b1_b64(b1) -> b64 {
|
||||
block0(v0: b1):
|
||||
@@ -241,9 +251,10 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sllg %r2, %r2, 63
|
||||
; nextln: srag %r2, %r2, 63
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllg %r5, %r2, 63
|
||||
; srag %r2, %r5, 63
|
||||
; br %r14
|
||||
|
||||
function %bextend_b1_b32(b1) -> b32 {
|
||||
block0(v0: b1):
|
||||
@@ -251,9 +262,10 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r2, 31
|
||||
; srak %r2, %r5, 31
|
||||
; br %r14
|
||||
|
||||
function %bextend_b1_b16(b1) -> b16 {
|
||||
block0(v0: b1):
|
||||
@@ -261,9 +273,10 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r5, %r2, 31
|
||||
; srak %r2, %r5, 31
|
||||
; br %r14
|
||||
|
||||
function %bextend_b1_b8(b1) -> b8 {
|
||||
block0(v0: b1):
|
||||
@@ -271,13 +284,10 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BREDUCE
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r5, %r2, 31
|
||||
; srak %r2, %r5, 31
|
||||
; br %r14
|
||||
|
||||
function %breduce_b64_b32(b64, b64) -> b32 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -285,8 +295,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b64_b16(b64, b64) -> b16 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -294,8 +305,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b64_b8(b64, b64) -> b8 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -303,8 +315,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b64_b1(b64, b64) -> b1 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -312,8 +325,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b32_b16(b32, b32) -> b16 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -321,8 +335,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b32_b8(b32, b32) -> b8 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -330,8 +345,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b32_b1(b32, b32) -> b1 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -339,8 +355,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b16_b8(b16, b16) -> b8 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -348,8 +365,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b16_b1(b16, b16) -> b1 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -357,8 +375,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %breduce_b8_b1(b8, b8) -> b1 {
|
||||
block0(v0: b8, v1: b8):
|
||||
@@ -366,12 +385,9 @@ block0(v0: b8, v1: b8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BMASK
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b64_i64(b64, b64) -> i64 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -379,8 +395,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b64_i32(b64, b64) -> i32 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -388,8 +405,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b64_i16(b64, b64) -> i16 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -397,8 +415,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b64_i8(b64, b64) -> i8 {
|
||||
block0(v0: b64, v1: b64):
|
||||
@@ -406,8 +425,9 @@ block0(v0: b64, v1: b64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b32_i64(b32, b32) -> i64 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -415,8 +435,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgfr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b32_i32(b32, b32) -> i32 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -424,8 +445,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b32_i16(b32, b32) -> i16 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -433,8 +455,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b32_i8(b32, b32) -> i8 {
|
||||
block0(v0: b32, v1: b32):
|
||||
@@ -442,8 +465,9 @@ block0(v0: b32, v1: b32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b16_i64(b16, b16) -> i64 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -451,8 +475,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b16_i32(b16, b16) -> i32 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -460,8 +485,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b16_i16(b16, b16) -> i16 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -469,8 +495,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b16_i8(b16, b16) -> i8 {
|
||||
block0(v0: b16, v1: b16):
|
||||
@@ -478,8 +505,9 @@ block0(v0: b16, v1: b16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b8_i64(b8, b8) -> i64 {
|
||||
block0(v0: b8, v1: b8):
|
||||
@@ -487,8 +515,9 @@ block0(v0: b8, v1: b8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgbr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgbr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b8_i32(b8, b8) -> i32 {
|
||||
block0(v0: b8, v1: b8):
|
||||
@@ -496,8 +525,9 @@ block0(v0: b8, v1: b8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b8_i16(b8, b8) -> i16 {
|
||||
block0(v0: b8, v1: b8):
|
||||
@@ -505,8 +535,9 @@ block0(v0: b8, v1: b8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b8_i8(b8, b8) -> i8 {
|
||||
block0(v0: b8, v1: b8):
|
||||
@@ -514,8 +545,9 @@ block0(v0: b8, v1: b8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %bmask_b1_i64(b1, b1) -> i64 {
|
||||
block0(v0: b1, v1: b1):
|
||||
@@ -523,9 +555,10 @@ block0(v0: b1, v1: b1):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllg %r2, %r3, 63
|
||||
; nextln: srag %r2, %r2, 63
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllg %r3, %r3, 63
|
||||
; srag %r2, %r3, 63
|
||||
; br %r14
|
||||
|
||||
function %bmask_b1_i32(b1, b1) -> i32 {
|
||||
block0(v0: b1, v1: b1):
|
||||
@@ -533,9 +566,10 @@ block0(v0: b1, v1: b1):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r3, %r3, 31
|
||||
; srak %r2, %r3, 31
|
||||
; br %r14
|
||||
|
||||
function %bmask_b1_i16(b1, b1) -> i16 {
|
||||
block0(v0: b1, v1: b1):
|
||||
@@ -543,9 +577,10 @@ block0(v0: b1, v1: b1):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r3, %r3, 31
|
||||
; srak %r2, %r3, 31
|
||||
; br %r14
|
||||
|
||||
function %bmask_b1_i8(b1, b1) -> i8 {
|
||||
block0(v0: b1, v1: b1):
|
||||
@@ -553,13 +588,10 @@ block0(v0: b1, v1: b1):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r3, 31
|
||||
; nextln: srak %r2, %r2, 31
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BINT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r3, %r3, 31
|
||||
; srak %r2, %r3, 31
|
||||
; br %r14
|
||||
|
||||
function %bint_b64_i64(b64) -> i64 {
|
||||
block0(v0: b64):
|
||||
@@ -567,9 +599,10 @@ block0(v0: b64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghi %r3, 1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r5, 1
|
||||
; ngr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %bint_b64_i32(b64) -> i32 {
|
||||
block0(v0: b64):
|
||||
@@ -577,8 +610,9 @@ block0(v0: b64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nilf %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nilf %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b64_i16(b64) -> i16 {
|
||||
block0(v0: b64):
|
||||
@@ -586,8 +620,9 @@ block0(v0: b64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b64_i8(b64) -> i8 {
|
||||
block0(v0: b64):
|
||||
@@ -595,8 +630,9 @@ block0(v0: b64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b32_i64(b32) -> i64 {
|
||||
block0(v0: b32):
|
||||
@@ -604,9 +640,10 @@ block0(v0: b32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghi %r3, 1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r5, 1
|
||||
; ngr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %bint_b32_i32(b32) -> i32 {
|
||||
block0(v0: b32):
|
||||
@@ -614,8 +651,9 @@ block0(v0: b32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nilf %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nilf %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b32_i16(b32) -> i16 {
|
||||
block0(v0: b32):
|
||||
@@ -623,8 +661,9 @@ block0(v0: b32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b32_i8(b32) -> i8 {
|
||||
block0(v0: b32):
|
||||
@@ -632,8 +671,9 @@ block0(v0: b32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b16_i64(b16) -> i64 {
|
||||
block0(v0: b16):
|
||||
@@ -641,9 +681,10 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghi %r3, 1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r5, 1
|
||||
; ngr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %bint_b16_i32(b16) -> i32 {
|
||||
block0(v0: b16):
|
||||
@@ -651,8 +692,9 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nilf %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nilf %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b16_i16(b16) -> i16 {
|
||||
block0(v0: b16):
|
||||
@@ -660,8 +702,9 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b16_i8(b16) -> i8 {
|
||||
block0(v0: b16):
|
||||
@@ -669,8 +712,9 @@ block0(v0: b16):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b8_i64(b8) -> i64 {
|
||||
block0(v0: b8):
|
||||
@@ -678,9 +722,10 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghi %r3, 1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r5, 1
|
||||
; ngr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %bint_b8_i32(b8) -> i32 {
|
||||
block0(v0: b8):
|
||||
@@ -688,8 +733,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nilf %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nilf %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b8_i16(b8) -> i16 {
|
||||
block0(v0: b8):
|
||||
@@ -697,8 +743,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b8_i8(b8) -> i8 {
|
||||
block0(v0: b8):
|
||||
@@ -706,8 +753,9 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b1_i64(b1) -> i64 {
|
||||
block0(v0: b1):
|
||||
@@ -715,9 +763,10 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghi %r3, 1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r5, 1
|
||||
; ngr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %bint_b1_i32(b1) -> i32 {
|
||||
block0(v0: b1):
|
||||
@@ -725,8 +774,9 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nilf %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nilf %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b1_i16(b1) -> i16 {
|
||||
block0(v0: b1):
|
||||
@@ -734,8 +784,9 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %bint_b1_i8(b1) -> i8 {
|
||||
block0(v0: b1):
|
||||
@@ -743,6 +794,7 @@ block0(v0: b1):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: nill %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r2, 1
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
set avoid_div_traps=1
|
||||
target s390x
|
||||
|
||||
@@ -12,16 +12,17 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgr %r1, %r2
|
||||
; nextln: cgite %r3, 0
|
||||
; nextln: llihf %r2, 2147483647
|
||||
; nextln: iilf %r2, 4294967295
|
||||
; nextln: xgr %r2, %r1
|
||||
; nextln: ngr %r2, %r3
|
||||
; nextln: cgite %r2, -1
|
||||
; nextln: dsgr %r0, %r3
|
||||
; nextln: lgr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r1, %r2
|
||||
; cgite %r3, 0
|
||||
; llihf %r5, 2147483647
|
||||
; iilf %r5, 4294967295
|
||||
; xgrk %r4, %r5, %r1
|
||||
; ngrk %r2, %r4, %r3
|
||||
; cgite %r2, -1
|
||||
; dsgr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -30,11 +31,12 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgr %r1, %r2
|
||||
; nextln: lghi %r2, 2
|
||||
; nextln: dsgr %r0, %r2
|
||||
; nextln: lgr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r1, %r2
|
||||
; lghi %r2, 2
|
||||
; dsgr %r0, %r2
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -42,15 +44,16 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgfr %r1, %r2
|
||||
; nextln: cite %r3, 0
|
||||
; nextln: iilf %r2, 2147483647
|
||||
; nextln: xr %r2, %r1
|
||||
; nextln: nr %r2, %r3
|
||||
; nextln: cite %r2, -1
|
||||
; nextln: dsgfr %r0, %r3
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r1, %r2
|
||||
; cite %r3, 0
|
||||
; iilf %r5, 2147483647
|
||||
; xrk %r4, %r5, %r1
|
||||
; nrk %r5, %r4, %r3
|
||||
; cite %r5, -1
|
||||
; dsgfr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -59,11 +62,12 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgfr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r1, %r2
|
||||
; lhi %r2, 2
|
||||
; dsgfr %r0, %r2
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -71,16 +75,17 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghr %r1, %r2
|
||||
; nextln: lhr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: lhi %r3, 32767
|
||||
; nextln: xr %r3, %r1
|
||||
; nextln: nr %r3, %r2
|
||||
; nextln: cite %r3, -1
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r1, %r2
|
||||
; lhr %r4, %r3
|
||||
; cite %r4, 0
|
||||
; lhi %r3, 32767
|
||||
; xrk %r5, %r3, %r1
|
||||
; nrk %r3, %r5, %r4
|
||||
; cite %r3, -1
|
||||
; dsgfr %r0, %r4
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -89,11 +94,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r1, %r2
|
||||
; lhi %r2, 2
|
||||
; dsgfr %r0, %r2
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -101,16 +107,17 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgbr %r1, %r2
|
||||
; nextln: lbr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: lhi %r3, 127
|
||||
; nextln: xr %r3, %r1
|
||||
; nextln: nr %r3, %r2
|
||||
; nextln: cite %r3, -1
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgbr %r1, %r2
|
||||
; lbr %r4, %r3
|
||||
; cite %r4, 0
|
||||
; lhi %r3, 127
|
||||
; xrk %r5, %r3, %r1
|
||||
; nrk %r3, %r5, %r4
|
||||
; cite %r3, -1
|
||||
; dsgfr %r0, %r4
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %sdiv_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -119,15 +126,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgbr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; UDIV
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lgbr %r1, %r2
|
||||
; lhi %r2, 2
|
||||
; dsgfr %r0, %r2
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -135,12 +139,13 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghi %r0, 0
|
||||
; nextln: lgr %r1, %r2
|
||||
; nextln: cgite %r3, 0
|
||||
; nextln: dlgr %r0, %r3
|
||||
; nextln: lgr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; cgite %r3, 0
|
||||
; dlgr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -149,12 +154,13 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghi %r0, 0
|
||||
; nextln: lgr %r1, %r2
|
||||
; nextln: lghi %r2, 2
|
||||
; nextln: dlgr %r0, %r2
|
||||
; nextln: lgr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; lghi %r3, 2
|
||||
; dlgr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -162,12 +168,13 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: lr %r1, %r2
|
||||
; nextln: cite %r3, 0
|
||||
; nextln: dlr %r0, %r3
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; cite %r3, 0
|
||||
; dlr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -176,12 +183,13 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: lr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; lhi %r3, 2
|
||||
; dlr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -189,13 +197,14 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llhr %r1, %r2
|
||||
; nextln: llhr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llhr %r1, %r2
|
||||
; llhr %r5, %r3
|
||||
; cite %r5, 0
|
||||
; dlr %r0, %r5
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -204,12 +213,13 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llhr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llhr %r1, %r2
|
||||
; lhi %r3, 2
|
||||
; dlr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -217,13 +227,14 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llcr %r1, %r2
|
||||
; nextln: llcr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llcr %r1, %r2
|
||||
; llcr %r5, %r3
|
||||
; cite %r5, 0
|
||||
; dlr %r0, %r5
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %udiv_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -232,16 +243,13 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llcr %r1, %r2
|
||||
; nextln: lhi %r2, 2
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r1
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; SREM
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llcr %r1, %r2
|
||||
; lhi %r3, 2
|
||||
; dlr %r0, %r3
|
||||
; lgr %r2, %r1
|
||||
; br %r14
|
||||
|
||||
function %srem_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -249,13 +257,14 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgr %r1, %r2
|
||||
; nextln: cgite %r3, 0
|
||||
; nextln: cghi %r3, -1
|
||||
; nextln: locghie %r1, 0
|
||||
; nextln: dsgr %r0, %r3
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r1, %r2
|
||||
; cgite %r3, 0
|
||||
; cghi %r3, -1
|
||||
; locghie %r1, 0
|
||||
; dsgr %r0, %r3
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %srem_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -263,11 +272,12 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgfr %r1, %r2
|
||||
; nextln: cite %r3, 0
|
||||
; nextln: dsgfr %r0, %r3
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfr %r1, %r2
|
||||
; cite %r3, 0
|
||||
; dsgfr %r0, %r3
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %srem_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -275,12 +285,13 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghr %r1, %r2
|
||||
; nextln: lhr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghr %r1, %r2
|
||||
; lhr %r4, %r3
|
||||
; cite %r4, 0
|
||||
; dsgfr %r0, %r4
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %srem_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -288,16 +299,13 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lgbr %r1, %r2
|
||||
; nextln: lbr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dsgfr %r0, %r2
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; UREM
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lgbr %r1, %r2
|
||||
; lbr %r4, %r3
|
||||
; cite %r4, 0
|
||||
; dsgfr %r0, %r4
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %urem_i64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -305,12 +313,13 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lghi %r0, 0
|
||||
; nextln: lgr %r1, %r2
|
||||
; nextln: cgite %r3, 0
|
||||
; nextln: dlgr %r0, %r3
|
||||
; nextln: lgr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; cgite %r3, 0
|
||||
; dlgr %r0, %r3
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %urem_i32(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -318,12 +327,13 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: lr %r1, %r2
|
||||
; nextln: cite %r3, 0
|
||||
; nextln: dlr %r0, %r3
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; lgr %r1, %r2
|
||||
; cite %r3, 0
|
||||
; dlr %r0, %r3
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %urem_i16(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -331,13 +341,14 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llhr %r1, %r2
|
||||
; nextln: llhr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llhr %r1, %r2
|
||||
; llhr %r5, %r3
|
||||
; cite %r5, 0
|
||||
; dlr %r0, %r5
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
function %urem_i8(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -345,11 +356,12 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhi %r0, 0
|
||||
; nextln: llcr %r1, %r2
|
||||
; nextln: llcr %r2, %r3
|
||||
; nextln: cite %r2, 0
|
||||
; nextln: dlr %r0, %r2
|
||||
; nextln: lr %r2, %r0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r0, 0
|
||||
; llcr %r1, %r2
|
||||
; llcr %r5, %r3
|
||||
; cite %r5, 0
|
||||
; dlr %r0, %r5
|
||||
; lgr %r2, %r0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,7 +11,7 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; check: bcr 14, 0
|
||||
; nextln: br %r14
|
||||
|
||||
; block0:
|
||||
; bcr 14, 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -14,8 +14,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: bras %r1, 8 ; data.f32 0 ; le %f0, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 8 ; data.f32 0 ; le %f0, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %f64const_zero() -> f64 {
|
||||
block0:
|
||||
@@ -23,8 +24,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %f32const_one() -> f32 {
|
||||
block0:
|
||||
@@ -32,8 +34,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: bras %r1, 8 ; data.f32 1 ; le %f0, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 8 ; data.f32 1 ; le %f0, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %f64const_one() -> f64 {
|
||||
block0:
|
||||
@@ -41,12 +44,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data.f64 1 ; ld %f0, 0(%r1)
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FADD
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; bras %r1, 12 ; data.f64 1 ; ld %f0, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %fadd_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -54,8 +54,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: aebr %f0, %f2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; aebr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fadd_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -63,12 +64,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: adbr %f0, %f2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FSUB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; adbr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fsub_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -76,8 +74,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sebr %f0, %f2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sebr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fsub_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -85,12 +84,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sdbr %f0, %f2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FMUL
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sdbr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fmul_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -98,8 +94,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: meebr %f0, %f2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; meebr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fmul_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -107,12 +104,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: mdbr %f0, %f2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FDIV
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; mdbr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fdiv_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -120,8 +114,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: debr %f0, %f2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; debr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fdiv_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -129,12 +124,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: ddbr %f0, %f2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FMIN
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; ddbr %f0, %f2
|
||||
; br %r14
|
||||
|
||||
function %fmin_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -142,8 +134,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: wfminsb %f0, %f0, %f2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; wfminsb %f0, %f0, %f2, 1
|
||||
; br %r14
|
||||
|
||||
function %fmin_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -151,12 +144,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: wfmindb %f0, %f0, %f2, 1
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FMAX
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; wfmindb %f0, %f0, %f2, 1
|
||||
; br %r14
|
||||
|
||||
function %fmax_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -164,8 +154,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: wfmaxsb %f0, %f0, %f2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; wfmaxsb %f0, %f0, %f2, 1
|
||||
; br %r14
|
||||
|
||||
function %fmax_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -173,12 +164,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: wfmaxdb %f0, %f0, %f2, 1
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; SQRT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; wfmaxdb %f0, %f0, %f2, 1
|
||||
; br %r14
|
||||
|
||||
function %sqrt_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -186,8 +174,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sqebr %f0, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sqebr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %sqrt_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -195,12 +184,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sqdbr %f0, %f0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FABS
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sqdbr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fabs_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -208,8 +194,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lpebr %f0, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lpebr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fabs_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -217,12 +204,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lpdbr %f0, %f0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FNEG
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lpdbr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fneg_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -230,8 +214,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lcebr %f0, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcebr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fneg_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -239,12 +224,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lcdbr %f0, %f0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FPROMOTE/FDEMOTE
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; lcdbr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fpromote_f32(f32) -> f64 {
|
||||
block0(v0: f32):
|
||||
@@ -252,8 +234,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: ldebr %f0, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ldebr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %fdemote_f64(f64) -> f32 {
|
||||
block0(v0: f64):
|
||||
@@ -261,12 +244,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: ledbr %f0, %f0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; CEIL
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; ledbr %f0, %f0
|
||||
; br %r14
|
||||
|
||||
function %ceil_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -274,8 +254,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fiebr %f0, %f0, 6
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; fiebr %f0, %f0, 6
|
||||
; br %r14
|
||||
|
||||
function %ceil_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -283,12 +264,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fidbr %f0, %f0, 6
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FLOOR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; fidbr %f0, %f0, 6
|
||||
; br %r14
|
||||
|
||||
function %floor_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -296,8 +274,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fiebr %f0, %f0, 7
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; fiebr %f0, %f0, 7
|
||||
; br %r14
|
||||
|
||||
function %floor_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -305,12 +284,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fidbr %f0, %f0, 7
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; TRUNC
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; fidbr %f0, %f0, 7
|
||||
; br %r14
|
||||
|
||||
function %trunc_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -318,8 +294,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fiebr %f0, %f0, 5
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; fiebr %f0, %f0, 5
|
||||
; br %r14
|
||||
|
||||
function %trunc_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -327,12 +304,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fidbr %f0, %f0, 5
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; NEAREST
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; fidbr %f0, %f0, 5
|
||||
; br %r14
|
||||
|
||||
function %nearest_f32(f32) -> f32 {
|
||||
block0(v0: f32):
|
||||
@@ -340,8 +314,9 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fiebr %f0, %f0, 4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; fiebr %f0, %f0, 4
|
||||
; br %r14
|
||||
|
||||
function %nearest_f64(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
@@ -349,12 +324,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: fidbr %f0, %f0, 4
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FMA
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; fidbr %f0, %f0, 4
|
||||
; br %r14
|
||||
|
||||
function %fma_f32(f32, f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32, v2: f32):
|
||||
@@ -362,11 +334,11 @@ block0(v0: f32, v1: f32, v2: f32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; FIXME: regalloc
|
||||
|
||||
; check: maebr %f4, %f0, %f2
|
||||
; nextln: ler %f0, %f4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ldr %f1, %f0
|
||||
; ldr %f0, %f4
|
||||
; maebr %f0, %f1, %f2
|
||||
; br %r14
|
||||
|
||||
function %fma_f64(f64, f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64, v2: f64):
|
||||
@@ -374,13 +346,11 @@ block0(v0: f64, v1: f64, v2: f64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: madbr %f4, %f0, %f2
|
||||
; nextln: ldr %f0, %f4
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FCOPYSIGN
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; ldr %f1, %f0
|
||||
; ldr %f0, %f4
|
||||
; madbr %f0, %f1, %f2
|
||||
; br %r14
|
||||
|
||||
function %fcopysign_f32(f32, f32) -> f32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -388,8 +358,9 @@ block0(v0: f32, v1: f32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cpsdr %f0, %f2, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cpsdr %f0, %f2, %f0
|
||||
; br %r14
|
||||
|
||||
function %fcopysign_f64(f64, f64) -> f64 {
|
||||
block0(v0: f64, v1: f64):
|
||||
@@ -397,12 +368,9 @@ block0(v0: f64, v1: f64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cpsdr %f0, %f2, %f0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FCVT_TO_UINT/FCVT_TO_SINT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; cpsdr %f0, %f2, %f0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -410,11 +378,12 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cebr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: clfebr %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clfebr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -422,11 +391,12 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cebr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: cfebra %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cfebra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -434,11 +404,12 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cebr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: clgebr %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clgebr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -446,11 +417,12 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cebr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: cgebra %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cebr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cgebra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -458,11 +430,12 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdbr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: clfdbr %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clfdbr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -470,11 +443,12 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdbr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: cfdbra %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cfdbra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -482,11 +456,12 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdbr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: clgdbr %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; clgdbr %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -494,15 +469,12 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdbr %f0, %f0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: cgdbra %r2, 5, %f0, 0
|
||||
; nextln: jno 6 ; trap
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FCVT_FROM_UINT/FCVT_FROM_SINT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; cdbr %f0, %f0
|
||||
; jno 6 ; trap
|
||||
; cgdbra %r2, 5, %f0, 0
|
||||
; jno 6 ; trap
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f32(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
@@ -510,8 +482,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: celfbr %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; celfbr %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f32(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
@@ -519,8 +492,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cefbra %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cefbra %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f32(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
@@ -528,8 +502,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: celgbr %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; celgbr %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f32(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
@@ -537,8 +512,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cegbra %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cegbra %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i32_f64(i32) -> f64 {
|
||||
block0(v0: i32):
|
||||
@@ -546,8 +522,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdlfbr %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdlfbr %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i32_f64(i32) -> f64 {
|
||||
block0(v0: i32):
|
||||
@@ -555,8 +532,9 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdfbra %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdfbra %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_uint_i64_f64(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
@@ -564,8 +542,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdlgbr %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cdlgbr %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_from_sint_i64_f64(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
@@ -573,12 +552,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cdgbra %f0, 0, %r2, 0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FCVT_TO_UINT_SAT/FCVT_TO_SINT_SAT
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; cdgbra %f0, 0, %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -586,10 +562,11 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: clfebr %r2, 5, %f0, 0
|
||||
; nextln: cebr %f0, %f0
|
||||
; nextln: lochio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clfebr %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -597,10 +574,11 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cfebra %r2, 5, %f0, 0
|
||||
; nextln: cebr %f0, %f0
|
||||
; nextln: lochio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cfebra %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -608,10 +586,11 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: clgebr %r2, 5, %f0, 0
|
||||
; nextln: cebr %f0, %f0
|
||||
; nextln: locghio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgebr %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f32_i64(f32) -> i64 {
|
||||
block0(v0: f32):
|
||||
@@ -619,10 +598,11 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cgebra %r2, 5, %f0, 0
|
||||
; nextln: cebr %f0, %f0
|
||||
; nextln: locghio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgebra %r2, 5, %f0, 0
|
||||
; cebr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -630,10 +610,11 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: clfdbr %r2, 5, %f0, 0
|
||||
; nextln: cdbr %f0, %f0
|
||||
; nextln: lochio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clfdbr %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i32(f64) -> i32 {
|
||||
block0(v0: f64):
|
||||
@@ -641,10 +622,11 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cfdbra %r2, 5, %f0, 0
|
||||
; nextln: cdbr %f0, %f0
|
||||
; nextln: lochio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cfdbra %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; lochio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_uint_sat_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -652,10 +634,11 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: clgdbr %r2, 5, %f0, 0
|
||||
; nextln: cdbr %f0, %f0
|
||||
; nextln: locghio %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgdbr %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %fcvt_to_sint_sat_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -663,14 +646,11 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cgdbra %r2, 5, %f0, 0
|
||||
; nextln: cdbr %f0, %f0
|
||||
; nextln: locghio %r2, 0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; BITCAST
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; cgdbra %r2, 5, %f0, 0
|
||||
; cdbr %f0, %f0
|
||||
; locghio %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %bitcast_i64_f64(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
@@ -678,8 +658,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: ldgr %f0, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ldgr %f0, %r2
|
||||
; br %r14
|
||||
|
||||
function %bitcast_f64_i64(f64) -> i64 {
|
||||
block0(v0: f64):
|
||||
@@ -687,8 +668,9 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgdr %r2, %f0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgdr %r2, %f0
|
||||
; br %r14
|
||||
|
||||
function %bitcast_i32_f32(i32) -> f32 {
|
||||
block0(v0: i32):
|
||||
@@ -696,9 +678,10 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: sllg %r2, %r2, 32
|
||||
; nextln: ldgr %f0, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllg %r5, %r2, 32
|
||||
; ldgr %f0, %r5
|
||||
; br %r14
|
||||
|
||||
function %bitcast_f32_i32(f32) -> i32 {
|
||||
block0(v0: f32):
|
||||
@@ -706,6 +689,8 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgdr %r2, %f0
|
||||
; nextln: srlg %r2, %r2, 32
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgdr %r5, %f0
|
||||
; srlg %r2, %r5, 32
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x arch13
|
||||
|
||||
function %load_f64_little(i64) -> f64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: vlebrg %f0, 0(%r2), 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; vlebrg %f0, 0(%r2), 0
|
||||
; br %r14
|
||||
|
||||
function %load_f32_little(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
@@ -16,8 +17,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: vlebrf %f0, 0(%r2), 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; vlebrf %f0, 0(%r2), 0
|
||||
; br %r14
|
||||
|
||||
function %store_f64_little(f64, i64) {
|
||||
block0(v0: f64, v1: i64):
|
||||
@@ -25,8 +27,9 @@ block0(v0: f64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: vstebrg %f0, 0(%r2), 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; vstebrg %f0, 0(%r2), 0
|
||||
; br %r14
|
||||
|
||||
function %store_f32_little(f32, i64) {
|
||||
block0(v0: f32, v1: i64):
|
||||
@@ -34,6 +37,7 @@ block0(v0: f32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: vstebrf %f0, 0(%r2), 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; vstebrf %f0, 0(%r2), 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %load_f64(i64) -> f64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: ld %f0, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ld %f0, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_f32(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
@@ -16,8 +17,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: le %f0, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; le %f0, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_f64_little(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
@@ -25,9 +27,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvg %r2, 0(%r2)
|
||||
; nextln: ldgr %f0, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvg %r5, 0(%r2)
|
||||
; ldgr %f0, %r5
|
||||
; br %r14
|
||||
|
||||
function %load_f32_little(i64) -> f32 {
|
||||
block0(v0: i64):
|
||||
@@ -35,10 +38,11 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrv %r2, 0(%r2)
|
||||
; nextln: sllg %r2, %r2, 32
|
||||
; nextln: ldgr %f0, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrv %r5, 0(%r2)
|
||||
; sllg %r3, %r5, 32
|
||||
; ldgr %f0, %r3
|
||||
; br %r14
|
||||
|
||||
function %store_f64(f64, i64) {
|
||||
block0(v0: f64, v1: i64):
|
||||
@@ -46,8 +50,9 @@ block0(v0: f64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: std %f0, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; std %f0, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %store_f32(f32, i64) {
|
||||
block0(v0: f32, v1: i64):
|
||||
@@ -55,8 +60,9 @@ block0(v0: f32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: ste %f0, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ste %f0, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %store_f64_little(f64, i64) {
|
||||
block0(v0: f64, v1: i64):
|
||||
@@ -64,9 +70,10 @@ block0(v0: f64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lgdr %r3, %f0
|
||||
; nextln: strvg %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgdr %r3, %f0
|
||||
; strvg %r3, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %store_f32_little(f32, i64) {
|
||||
block0(v0: f32, v1: i64):
|
||||
@@ -74,8 +81,9 @@ block0(v0: f32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lgdr %r3, %f0
|
||||
; nextln: srlg %r3, %r3, 32
|
||||
; nextln: strv %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgdr %r3, %f0
|
||||
; srlg %r4, %r3, 32
|
||||
; strv %r4, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %dynamic_heap_check(i64 vmctx, i32) -> i64 {
|
||||
@@ -11,20 +11,20 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: Block 0:
|
||||
; check: llgfr %r3, %r3
|
||||
; nextln: lghi %r4, 0
|
||||
; nextln: ag %r4, 0(%r2)
|
||||
; nextln: clgr %r3, %r4
|
||||
; nextln: jgnh label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: agr %r2, %r3
|
||||
; nextln: lghi %r5, 0
|
||||
; nextln: clgr %r3, %r4
|
||||
; nextln: locgrh %r2, %r5
|
||||
; nextln: br %r14
|
||||
; check: Block 2:
|
||||
; check: trap
|
||||
; block0:
|
||||
; llgfr %r4, %r3
|
||||
; lghi %r3, 0
|
||||
; ag %r3, 0(%r2)
|
||||
; clgr %r4, %r3
|
||||
; jgnh label1 ; jg label2
|
||||
; block1:
|
||||
; agr %r2, %r4
|
||||
; lghi %r5, 0
|
||||
; clgr %r4, %r3
|
||||
; locgrh %r2, %r5
|
||||
; br %r14
|
||||
; block2:
|
||||
; trap
|
||||
|
||||
function %static_heap_check(i64 vmctx, i32) -> i64 {
|
||||
gv0 = vmctx
|
||||
@@ -35,15 +35,16 @@ block0(v0: i64, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: Block 0:
|
||||
; check: llgfr %r3, %r3
|
||||
; nextln: clgfi %r3, 65536
|
||||
; nextln: jgnh label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: agr %r2, %r3
|
||||
; nextln: lghi %r4, 0
|
||||
; nextln: clgfi %r3, 65536
|
||||
; nextln: locgrh %r2, %r4
|
||||
; nextln: br %r14
|
||||
; check: Block 2:
|
||||
; check: trap
|
||||
; block0:
|
||||
; llgfr %r3, %r3
|
||||
; clgfi %r3, 65536
|
||||
; jgnh label1 ; jg label2
|
||||
; block1:
|
||||
; agr %r2, %r3
|
||||
; lghi %r4, 0
|
||||
; clgfi %r3, 65536
|
||||
; locgrh %r2, %r4
|
||||
; br %r14
|
||||
; block2:
|
||||
; trap
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %icmp_slt_i64(i64, i64) -> b1 {
|
||||
@@ -7,10 +7,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cgr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_ext32(i64, i32) -> b1 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -19,10 +20,11 @@ block0(v0: i64, v1: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cgfr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgfr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_imm16(i64) -> b1 {
|
||||
block0(v0: i64):
|
||||
@@ -31,10 +33,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cghi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cghi %r2, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_imm32(i64) -> b1 {
|
||||
block0(v0: i64):
|
||||
@@ -43,10 +46,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cgfi %r2, 32768
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgfi %r2, 32768
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_mem(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -55,10 +59,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cg %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cg %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_sym(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -69,10 +74,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cgrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_mem_ext16(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -81,10 +87,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cgh %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgh %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_sym_ext16(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -95,10 +102,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cghrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cghrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_mem_ext32(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -107,10 +115,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cgf %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgf %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i64_sym_ext32(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -121,10 +130,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cgfrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cgfrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -132,10 +142,11 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_imm16(i32) -> b1 {
|
||||
block0(v0: i32):
|
||||
@@ -144,10 +155,11 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: chi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; chi %r2, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_imm(i32) -> b1 {
|
||||
block0(v0: i32):
|
||||
@@ -156,10 +168,11 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: cfi %r2, 32768
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cfi %r2, 32768
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_mem(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -168,10 +181,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: c %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; c %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_memoff(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -180,10 +194,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cy %r2, 4096(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cy %r2, 4096(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_sym(i32) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -194,10 +209,11 @@ block0(v0: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: crl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; crl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_mem_ext16(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -206,10 +222,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: ch %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ch %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_memoff_ext16(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -218,10 +235,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: chy %r2, 4096(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; chy %r2, 4096(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i32_sym_ext16(i32) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -232,10 +250,11 @@ block0(v0: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: chrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; chrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -243,12 +262,14 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: lhr %r3, %r3
|
||||
; nextln: cr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; lhr %r3, %r2
|
||||
; lhr %r5, %r5
|
||||
; cr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i16_imm(i16) -> b1 {
|
||||
block0(v0: i16):
|
||||
@@ -257,11 +278,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: chi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r5, %r2
|
||||
; chi %r5, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i16_mem(i16, i64) -> b1 {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -270,11 +292,12 @@ block0(v0: i16, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: ch %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r4, %r2
|
||||
; ch %r4, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i16_sym(i16) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -285,11 +308,12 @@ block0(v0: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: chrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r5, %r2
|
||||
; chrl %r5, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -297,12 +321,14 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: lbr %r3, %r3
|
||||
; nextln: cr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; lbr %r3, %r2
|
||||
; lbr %r5, %r5
|
||||
; cr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i8_imm(i8) -> b1 {
|
||||
block0(v0: i8):
|
||||
@@ -311,11 +337,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: chi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r5, %r2
|
||||
; chi %r5, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_slt_i8_mem(i8, i64) -> b1 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -324,12 +351,14 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: lb %r3, 0(%r3)
|
||||
; nextln: cr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; lbr %r3, %r2
|
||||
; lb %r5, 0(%r5)
|
||||
; cr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -337,10 +366,11 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: clgr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_ext32(i64, i32) -> b1 {
|
||||
block0(v0: i64, v1: i32):
|
||||
@@ -349,10 +379,11 @@ block0(v0: i64, v1: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clgfr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgfr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_imm(i64) -> b1 {
|
||||
block0(v0: i64):
|
||||
@@ -361,10 +392,11 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: clgfi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgfi %r2, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_mem(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -373,10 +405,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clg %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clg %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_sym(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -387,10 +420,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clgrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_mem_ext32(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -399,10 +433,11 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clgf %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgf %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_sym_ext32(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -413,10 +448,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clgfrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clgfrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_mem_ext16(i64, i64) -> b1 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -425,11 +461,12 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llgh %r3, 0(%r3)
|
||||
; check: clgr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgh %r4, 0(%r3)
|
||||
; clgr %r2, %r4
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i64_sym_ext16(i64) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -440,10 +477,11 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clghrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clghrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32(i32, i32) -> b1 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -451,10 +489,11 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clr %r2, %r3
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_imm(i32) -> b1 {
|
||||
block0(v0: i32):
|
||||
@@ -463,10 +502,11 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: clfi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clfi %r2, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_mem(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -475,10 +515,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cl %r2, 0(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cl %r2, 0(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_memoff(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -487,10 +528,11 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: cly %r2, 4096(%r3)
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cly %r2, 4096(%r3)
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_sym(i32) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -501,10 +543,11 @@ block0(v0: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_mem_ext16(i32, i64) -> b1 {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -513,11 +556,12 @@ block0(v0: i32, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llh %r3, 0(%r3)
|
||||
; check: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r4, 0(%r3)
|
||||
; clr %r2, %r4
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i32_sym_ext16(i32) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -528,10 +572,11 @@ block0(v0: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: clhrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; clhrl %r2, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i16(i16, i16) -> b1 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -539,12 +584,14 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: llhr %r3, %r3
|
||||
; nextln: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; llhr %r3, %r2
|
||||
; llhr %r5, %r5
|
||||
; clr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i16_imm(i16) -> b1 {
|
||||
block0(v0: i16):
|
||||
@@ -553,11 +600,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: clfi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; clfi %r5, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i16_mem(i16, i64) -> b1 {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -566,12 +614,14 @@ block0(v0: i16, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: llh %r3, 0(%r3)
|
||||
; nextln: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; llhr %r3, %r2
|
||||
; llh %r5, 0(%r5)
|
||||
; clr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i16_mem(i16) -> b1 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -582,11 +632,12 @@ block0(v0: i16):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: clhrl %r2, %sym + 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; clhrl %r5, %sym + 0
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i8(i8, i8) -> b1 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -594,12 +645,14 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: llcr %r3, %r3
|
||||
; nextln: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; llcr %r3, %r2
|
||||
; llcr %r5, %r5
|
||||
; clr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i8_imm(i8) -> b1 {
|
||||
block0(v0: i8):
|
||||
@@ -608,11 +661,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: clfi %r2, 1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; clfi %r5, 1
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %icmp_ult_i8_mem(i8, i64) -> b1 {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -621,10 +675,12 @@ block0(v0: i8, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: llc %r3, 0(%r3)
|
||||
; nextln: clr %r2, %r3
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochil %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r5, %r3
|
||||
; llcr %r3, %r2
|
||||
; llc %r5, 0(%r5)
|
||||
; clr %r3, %r5
|
||||
; lhi %r2, 0
|
||||
; lochil %r2, 1
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %f(i64) -> i64 {
|
||||
@@ -28,24 +28,32 @@ block5(v5: i64):
|
||||
return v6
|
||||
}
|
||||
|
||||
; check: clgfi %r2, 3
|
||||
; nextln: jghe label1
|
||||
; nextln: sllg %r3, %r2, 2
|
||||
; nextln: larl %r1, 14 ; agf %r1, 0(%r1, %r3) ; br %r1 ; jt_entries label3 label5 label7
|
||||
|
||||
; check: Block 3
|
||||
; check: lghi %r3, 1
|
||||
; nextln: jg
|
||||
|
||||
; check: Block 5
|
||||
; check: lghi %r3, 2
|
||||
; nextln: jg
|
||||
|
||||
; check: Block 7
|
||||
; check: lghi %r3, 3
|
||||
; nextln: jg
|
||||
|
||||
; check: agr %r2, %r3
|
||||
; nextln: br %r14
|
||||
|
||||
; block0:
|
||||
; clgfi %r2, 3
|
||||
; jghe label1
|
||||
; sllg %r5, %r2, 2
|
||||
; larl %r1, 14 ; agf %r1, 0(%r1, %r5) ; br %r1 ; jt_entries label3 label5 label7
|
||||
; block1:
|
||||
; lghi %r4, 4
|
||||
; jg label2
|
||||
; block2:
|
||||
; jg label9
|
||||
; block3:
|
||||
; lghi %r4, 1
|
||||
; jg label4
|
||||
; block4:
|
||||
; jg label9
|
||||
; block5:
|
||||
; lghi %r4, 2
|
||||
; jg label6
|
||||
; block6:
|
||||
; jg label9
|
||||
; block7:
|
||||
; lghi %r4, 3
|
||||
; jg label8
|
||||
; block8:
|
||||
; jg label9
|
||||
; block9:
|
||||
; agr %r2, %r4
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %load_i64(i64) -> i64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvg %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvg %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvg %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %uload8_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -27,8 +29,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -36,8 +39,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -45,9 +49,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: llghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r5, 0(%r2)
|
||||
; llghr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %uload16_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -57,9 +62,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: llghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
|
||||
; llghr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %sload16_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -67,9 +73,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: lghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r5, 0(%r2)
|
||||
; lghr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %sload16_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -79,9 +86,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: lghr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
|
||||
; lghr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %uload32_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -89,9 +97,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrv %r2, 0(%r2)
|
||||
; nextln: llgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrv %r5, 0(%r2)
|
||||
; llgfr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %uload32_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -101,9 +110,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; nextln: llgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrv %r3, 0(%r1)
|
||||
; llgfr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %sload32_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -111,9 +121,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrv %r2, 0(%r2)
|
||||
; nextln: lgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrv %r5, 0(%r2)
|
||||
; lgfr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %sload32_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -123,9 +134,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; nextln: lgfr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrv %r3, 0(%r1)
|
||||
; lgfr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %load_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -133,8 +145,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrv %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrv %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -144,8 +157,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrv %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %uload8_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -153,8 +167,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -162,8 +177,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -171,9 +187,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: llhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r5, 0(%r2)
|
||||
; llhr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %uload16_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -183,9 +200,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: llhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
|
||||
; llhr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %sload16_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -193,9 +211,10 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: lhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r5, 0(%r2)
|
||||
; lhr %r2, %r5
|
||||
; br %r14
|
||||
|
||||
function %sload16_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -205,9 +224,10 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: lhr %r2, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r3, 0(%r1)
|
||||
; lhr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %load_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -215,8 +235,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrvh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrvh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i16_sym() -> i16 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -226,8 +247,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; lrvh %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %uload8_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -235,8 +257,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -244,8 +267,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i8(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
@@ -253,6 +277,7 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %load_i64(i64) -> i64 {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lg %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lg %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %uload8_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -27,8 +29,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -36,8 +39,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -45,8 +49,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -56,8 +61,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llghrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llghrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %sload16_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -65,8 +71,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload16_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -76,8 +83,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lghrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %uload32_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -85,8 +93,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgf %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgf %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload32_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -96,8 +105,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llgfrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llgfrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %sload32_i64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -105,8 +115,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgf %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgf %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload32_i64_sym() -> i64 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -116,8 +127,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgfrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgfrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %load_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -125,8 +137,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: l %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; l %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -136,8 +149,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %load_i32_off(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -145,8 +159,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: ly %r2, 4096(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; ly %r2, 4096(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload8_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -154,8 +169,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -163,8 +179,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -172,8 +189,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %uload16_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -183,8 +201,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llhrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %sload16_i32(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -192,8 +211,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload16_i32_off(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -201,8 +221,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lhy %r2, 4096(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhy %r2, 4096(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload16_i32_sym() -> i32 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -212,8 +233,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lhrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %load_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -221,8 +243,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llh %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llh %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i16_sym() -> i16 {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -232,8 +255,9 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llhrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %uload8_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -241,8 +265,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %sload8_i16(i64) -> i16 {
|
||||
block0(v0: i64):
|
||||
@@ -250,8 +275,9 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lb %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lb %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %load_i8(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
@@ -259,6 +285,7 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: llc %r2, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llc %r2, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;; Test default (non-SpiderMonkey) ABI.
|
||||
@@ -11,11 +11,12 @@ block1:
|
||||
return v0, v1, v2, v3
|
||||
}
|
||||
|
||||
; check: lghi %r2, 1
|
||||
; nextln: lghi %r3, 2
|
||||
; nextln: lghi %r4, 3
|
||||
; nextln: lghi %r5, 4
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r2, 1
|
||||
; lghi %r3, 2
|
||||
; lghi %r4, 3
|
||||
; lghi %r5, 4
|
||||
; br %r14
|
||||
|
||||
function %f1() -> i64, i64, i64, i64, i64, i64 {
|
||||
block1:
|
||||
@@ -28,20 +29,20 @@ block1:
|
||||
return v0, v1, v2, v3, v4, v5
|
||||
}
|
||||
|
||||
; check: stmg %r12, %r15, 96(%r15)
|
||||
; nextln: lgr %r14, %r2
|
||||
; nextln: lghi %r2, 1
|
||||
; nextln: lghi %r3, 2
|
||||
; nextln: lghi %r4, 3
|
||||
; nextln: lghi %r5, 4
|
||||
; nextln: lghi %r13, 5
|
||||
; nextln: lghi %r12, 6
|
||||
; nextln: stg %r13, 0(%r14)
|
||||
; nextln: stg %r12, 8(%r14)
|
||||
; nextln: lmg %r12, %r15, 96(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r6, %r15, 48(%r15)
|
||||
; block0:
|
||||
; lgr %r12, %r2
|
||||
; lghi %r2, 1
|
||||
; lghi %r3, 2
|
||||
; lghi %r4, 3
|
||||
; lghi %r5, 4
|
||||
; lghi %r10, 5
|
||||
; lghi %r6, 6
|
||||
; stg %r10, 0(%r12)
|
||||
; stg %r6, 8(%r12)
|
||||
; lmg %r6, %r15, 48(%r15)
|
||||
; br %r14
|
||||
|
||||
;; Test default (non-SpiderMonkey) ABI.
|
||||
function %f3() -> f64, f64, f64, f64 {
|
||||
block1:
|
||||
v0 = f64const 0x0.0
|
||||
@@ -51,11 +52,12 @@ block1:
|
||||
return v0, v1, v2, v3
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %f4() -> f64, f64, f64, f64, f64, f64 {
|
||||
block1:
|
||||
@@ -68,12 +70,14 @@ block1:
|
||||
return v0, v1, v2, v3, v4, v5
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 4 ; ld %f1, 0(%r1)
|
||||
; nextln: bras %r1, 12 ; data.f64 5 ; ld %f3, 0(%r1)
|
||||
; nextln: std %f1, 0(%r2)
|
||||
; nextln: std %f3, 8(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 12 ; data.f64 0 ; ld %f0, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 1 ; ld %f2, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 2 ; ld %f4, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 3 ; ld %f6, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 4 ; ld %f5, 0(%r1)
|
||||
; bras %r1, 12 ; data.f64 5 ; ld %f7, 0(%r1)
|
||||
; std %f5, 0(%r2)
|
||||
; std %f7, 8(%r2)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %f0(r64, r64) -> r64 {
|
||||
@@ -6,8 +6,9 @@ block0(v0: r64, v1: r64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: lgr %r2, %r3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lgr %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %f1(r64) -> b1 {
|
||||
block0(v0: r64):
|
||||
@@ -15,10 +16,11 @@ block0(v0: r64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cghi %r2, 0
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochie %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cghi %r2, 0
|
||||
; lhi %r2, 0
|
||||
; lochie %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %f2(r64) -> b1 {
|
||||
block0(v0: r64):
|
||||
@@ -26,10 +28,11 @@ block0(v0: r64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; check: cghi %r2, -1
|
||||
; nextln: lhi %r2, 0
|
||||
; nextln: lochie %r2, 1
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; cghi %r2, -1
|
||||
; lhi %r2, 0
|
||||
; lochie %r2, 1
|
||||
; br %r14
|
||||
|
||||
function %f3() -> r64 {
|
||||
block0:
|
||||
@@ -37,8 +40,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: lghi %r2, 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r2, 0
|
||||
; br %r14
|
||||
|
||||
function %f4(r64, r64) -> r64, r64, r64 {
|
||||
fn0 = %f(r64) -> b1
|
||||
@@ -61,41 +65,36 @@ block3(v7: r64, v8: r64):
|
||||
return v7, v8, v9
|
||||
}
|
||||
|
||||
; check: Block 0:
|
||||
; check: stmg %r12, %r15, 96(%r15)
|
||||
; nextln: aghi %r15, -192
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: lgr %r13, %r2
|
||||
; nextln: lgr %r12, %r3
|
||||
; nextln: lgr %r2, %r13
|
||||
; nextln: bras %r1, 12 ; data %f + 0 ; lg %r3, 0(%r1)
|
||||
; nextln: stg %r2, 168(%r15)
|
||||
; nextln: stg %r13, 176(%r15)
|
||||
; nextln: stg %r12, 184(%r15)
|
||||
; nextln: (safepoint: slots [S0, S1, S2]
|
||||
; nextln: basr %r14, %r3
|
||||
; nextln: lg %r13, 176(%r15)
|
||||
; nextln: lg %r12, 184(%r15)
|
||||
; nextln: la %r3, 160(%r15)
|
||||
; nextln: stg %r13, 0(%r3)
|
||||
; nextln: llcr %r2, %r2
|
||||
; nextln: chi %r2, 0
|
||||
; nextln: jgnlh label1 ; jg label3
|
||||
; check: Block 1:
|
||||
; check: jg label2
|
||||
; check: Block 2:
|
||||
; check: lgr %r2, %r12
|
||||
; nextln: jg label5
|
||||
; check: Block 3:
|
||||
; check: jg label4
|
||||
; check: Block 4:
|
||||
; check: lgr %r2, %r13
|
||||
; nextln: lgr %r13, %r12
|
||||
; nextln: jg label5
|
||||
; check: Block 5:
|
||||
; check: la %r3, 160(%r15)
|
||||
; nextln: lg %r3, 0(%r3)
|
||||
; nextln: lgr %r4, %r3
|
||||
; nextln: lgr %r3, %r13
|
||||
; nextln: lmg %r12, %r15, 288(%r15)
|
||||
; nextln: br %r14
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -184
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; lgr %r4, %r3
|
||||
; lgr %r3, %r2
|
||||
; bras %r1, 12 ; data %f + 0 ; lg %r5, 0(%r1)
|
||||
; stg %r3, 168(%r15)
|
||||
; stg %r4, 176(%r15)
|
||||
; basr %r14, %r5
|
||||
; lg %r3, 168(%r15)
|
||||
; la %r4, 160(%r15)
|
||||
; stg %r3, 0(%r4)
|
||||
; llcr %r4, %r2
|
||||
; chi %r4, 0
|
||||
; jgnlh label1 ; jg label3
|
||||
; block1:
|
||||
; jg label2
|
||||
; block2:
|
||||
; lg %r2, 176(%r15)
|
||||
; jg label5
|
||||
; block3:
|
||||
; jg label4
|
||||
; block4:
|
||||
; lgr %r2, %r3
|
||||
; lg %r3, 176(%r15)
|
||||
; jg label5
|
||||
; block5:
|
||||
; la %r4, 160(%r15)
|
||||
; lg %r4, 0(%r4)
|
||||
; lmg %r14, %r15, 296(%r15)
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
; FIXME: not yet supported
|
||||
|
||||
function %uaddsat64(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
; v2 = uadd_sat.i64 v0, v1
|
||||
;;SKIP v2 = uadd_sat.i64 v0, v1
|
||||
v2 = iconst.i64 0
|
||||
return v2
|
||||
}
|
||||
|
||||
; block0:
|
||||
; lghi %r2, 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -11,9 +11,10 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lcgr %r3, %r3
|
||||
; nextln: rllg %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcgr %r3, %r3
|
||||
; rllg %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %rotr_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -22,8 +23,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rllg %r2, %r2, 47
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rllg %r2, %r2, 47
|
||||
; br %r14
|
||||
|
||||
function %rotr_i32_reg(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -31,9 +33,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lcr %r3, %r3
|
||||
; nextln: rll %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lcr %r3, %r3
|
||||
; rll %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %rotr_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -42,8 +45,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rll %r2, %r2, 15
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rll %r2, %r2, 15
|
||||
; br %r14
|
||||
|
||||
function %rotr_i16_reg(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -51,14 +55,15 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: lcr %r4, %r3
|
||||
; nextln: nill %r3, 15
|
||||
; nextln: nill %r4, 15
|
||||
; nextln: sllk %r4, %r2, 0(%r4)
|
||||
; nextln: srlk %r2, %r2, 0(%r3)
|
||||
; nextln: ork %r2, %r4, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r4, %r2
|
||||
; lcr %r5, %r3
|
||||
; nill %r3, 15
|
||||
; nill %r5, 15
|
||||
; sllk %r5, %r4, 0(%r5)
|
||||
; srlk %r3, %r4, 0(%r3)
|
||||
; ork %r2, %r5, %r3
|
||||
; br %r14
|
||||
|
||||
function %rotr_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -67,11 +72,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 6
|
||||
; nextln: srlk %r2, %r2, 10
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; sllk %r3, %r5, 6
|
||||
; srlk %r5, %r5, 10
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %rotr_i8_reg(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -79,14 +85,15 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: lcr %r4, %r3
|
||||
; nextln: nill %r3, 7
|
||||
; nextln: nill %r4, 7
|
||||
; nextln: sllk %r4, %r2, 0(%r4)
|
||||
; nextln: srlk %r2, %r2, 0(%r3)
|
||||
; nextln: ork %r2, %r4, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r4, %r2
|
||||
; lcr %r5, %r3
|
||||
; nill %r3, 7
|
||||
; nill %r5, 7
|
||||
; sllk %r5, %r4, 0(%r5)
|
||||
; srlk %r3, %r4, 0(%r3)
|
||||
; ork %r2, %r5, %r3
|
||||
; br %r14
|
||||
|
||||
function %rotr_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -95,15 +102,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 5
|
||||
; nextln: srlk %r2, %r2, 3
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ROTL
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; sllk %r3, %r5, 5
|
||||
; srlk %r5, %r5, 3
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %rotl_i64_reg(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -111,8 +115,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rllg %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rllg %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %rotl_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -121,8 +126,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rllg %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rllg %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %rotl_i32_reg(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -130,8 +136,9 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rll %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rll %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %rotl_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -140,8 +147,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: rll %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; rll %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %rotl_i16_reg(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -149,14 +157,15 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: lcr %r4, %r3
|
||||
; nextln: nill %r3, 15
|
||||
; nextln: nill %r4, 15
|
||||
; nextln: sllk %r3, %r2, 0(%r3)
|
||||
; nextln: srlk %r2, %r2, 0(%r4)
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r4, %r2
|
||||
; lcr %r5, %r3
|
||||
; nill %r3, 15
|
||||
; nill %r5, 15
|
||||
; sllk %r2, %r4, 0(%r3)
|
||||
; srlk %r3, %r4, 0(%r5)
|
||||
; or %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %rotl_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -165,11 +174,12 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 10
|
||||
; nextln: srlk %r2, %r2, 6
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; sllk %r3, %r5, 10
|
||||
; srlk %r5, %r5, 6
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %rotl_i8_reg(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -177,14 +187,15 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: lcr %r4, %r3
|
||||
; nextln: nill %r3, 7
|
||||
; nextln: nill %r4, 7
|
||||
; nextln: sllk %r3, %r2, 0(%r3)
|
||||
; nextln: srlk %r2, %r2, 0(%r4)
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r4, %r2
|
||||
; lcr %r5, %r3
|
||||
; nill %r3, 7
|
||||
; nill %r5, 7
|
||||
; sllk %r2, %r4, 0(%r3)
|
||||
; srlk %r3, %r4, 0(%r5)
|
||||
; or %r2, %r3
|
||||
; br %r14
|
||||
|
||||
function %rotr_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -193,15 +204,12 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: sllk %r3, %r2, 3
|
||||
; nextln: srlk %r2, %r2, 5
|
||||
; nextln: ork %r2, %r3, %r2
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; USHR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; sllk %r3, %r5, 3
|
||||
; srlk %r5, %r5, 5
|
||||
; ork %r2, %r3, %r5
|
||||
; br %r14
|
||||
|
||||
function %ushr_i64_reg(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -209,8 +217,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srlg %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srlg %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ushr_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -219,8 +228,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srlg %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srlg %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %ushr_i32_reg(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -228,8 +238,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srlk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r3, 31
|
||||
; srlk %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ushr_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -238,8 +250,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srlk %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srlk %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %ushr_i16_reg(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -247,10 +260,11 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: nill %r3, 15
|
||||
; nextln: srlk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r4, %r2
|
||||
; nill %r3, 15
|
||||
; srlk %r2, %r4, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ushr_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -259,9 +273,10 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llhr %r2, %r2
|
||||
; nextln: srlk %r2, %r2, 10
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llhr %r5, %r2
|
||||
; srlk %r2, %r5, 10
|
||||
; br %r14
|
||||
|
||||
function %ushr_i8_reg(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -269,10 +284,11 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: nill %r3, 7
|
||||
; nextln: srlk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; llcr %r4, %r2
|
||||
; nill %r3, 7
|
||||
; srlk %r2, %r4, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ushr_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -281,13 +297,10 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: llcr %r2, %r2
|
||||
; nextln: srlk %r2, %r2, 3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ISHL
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; llcr %r5, %r2
|
||||
; srlk %r2, %r5, 3
|
||||
; br %r14
|
||||
|
||||
function %ishl_i64_reg(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -295,8 +308,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllg %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllg %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ishl_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -305,8 +319,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllg %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllg %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %ishl_i32_reg(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -314,8 +329,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r3, 31
|
||||
; sllk %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ishl_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -324,8 +341,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %ishl_i16_reg(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -333,9 +351,10 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nill %r3, 15
|
||||
; nextln: sllk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r3, 15
|
||||
; sllk %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ishl_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -344,8 +363,9 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 10
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sllk %r2, %r2, 10
|
||||
; br %r14
|
||||
|
||||
function %ishl_i8_reg(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -353,9 +373,10 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: nill %r3, 7
|
||||
; nextln: sllk %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r3, 7
|
||||
; sllk %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %ishl_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -364,12 +385,9 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: sllk %r2, %r2, 3
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; SSHR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; sllk %r2, %r2, 3
|
||||
; br %r14
|
||||
|
||||
function %sshr_i64_reg(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -377,8 +395,9 @@ block0(v0: i64, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srag %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srag %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %sshr_i64_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -387,8 +406,9 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srag %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srag %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %sshr_i32_reg(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -396,8 +416,10 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srak %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; nill %r3, 31
|
||||
; srak %r2, %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %sshr_i32_imm(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -406,8 +428,9 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: srak %r2, %r2, 17
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; srak %r2, %r2, 17
|
||||
; br %r14
|
||||
|
||||
function %sshr_i16_reg(i16, i16) -> i16 {
|
||||
block0(v0: i16, v1: i16):
|
||||
@@ -415,10 +438,11 @@ block0(v0: i16, v1: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: nill %r3, 15
|
||||
; nextln: srak %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r4, %r2
|
||||
; nill %r3, 15
|
||||
; srak %r2, %r4, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %sshr_i16_imm(i16) -> i16 {
|
||||
block0(v0: i16):
|
||||
@@ -427,9 +451,10 @@ block0(v0: i16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lhr %r2, %r2
|
||||
; nextln: srak %r2, %r2, 10
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhr %r5, %r2
|
||||
; srak %r2, %r5, 10
|
||||
; br %r14
|
||||
|
||||
function %sshr_i8_reg(i8, i8) -> i8 {
|
||||
block0(v0: i8, v1: i8):
|
||||
@@ -437,10 +462,11 @@ block0(v0: i8, v1: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: nill %r3, 7
|
||||
; nextln: srak %r2, %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r4, %r2
|
||||
; nill %r3, 7
|
||||
; srak %r2, %r4, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %sshr_i8_imm(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
@@ -449,7 +475,8 @@ block0(v0: i8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; check: lbr %r2, %r2
|
||||
; nextln: srak %r2, %r2, 3
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lbr %r5, %r2
|
||||
; srak %r2, %r5, 3
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %foo() {
|
||||
@@ -6,12 +6,16 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; block0:
|
||||
; br %r14
|
||||
|
||||
function %stack_limit_leaf_zero(i64 stack_limit) {
|
||||
block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: br %r14
|
||||
; block0:
|
||||
; br %r14
|
||||
|
||||
function %stack_limit_gv_leaf_zero(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -22,8 +26,8 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: br %r14
|
||||
|
||||
; block0:
|
||||
; br %r14
|
||||
|
||||
function %stack_limit_call_zero(i64 stack_limit) {
|
||||
fn0 = %foo()
|
||||
@@ -32,14 +36,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: clgrtle %r15, %r2
|
||||
; nextln: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: bras %r1, 12 ; data %foo + 0 ; lg %r2, 0(%r1)
|
||||
; nextln: basr %r14, %r2
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; clgrtle %r15, %r2
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; bras %r1, 12 ; data %foo + 0 ; lg %r4, 0(%r1)
|
||||
; basr %r14, %r4
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %stack_limit_gv_call_zero(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -52,16 +57,17 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lg %r1, 0(%r2)
|
||||
; nextln: lg %r1, 4(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: stmg %r14, %r15, 112(%r15)
|
||||
; nextln: aghi %r15, -160
|
||||
; nextln: virtual_sp_offset_adjust 160
|
||||
; nextln: bras %r1, 12 ; data %foo + 0 ; lg %r2, 0(%r1)
|
||||
; nextln: basr %r14, %r2
|
||||
; nextln: lmg %r14, %r15, 272(%r15)
|
||||
; nextln: br %r14
|
||||
; lg %r1, 0(%r2)
|
||||
; lg %r1, 4(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; stmg %r14, %r15, 112(%r15)
|
||||
; aghi %r15, -160
|
||||
; virtual_sp_offset_adjust 160
|
||||
; block0:
|
||||
; bras %r1, 12 ; data %foo + 0 ; lg %r4, 0(%r1)
|
||||
; basr %r14, %r4
|
||||
; lmg %r14, %r15, 272(%r15)
|
||||
; br %r14
|
||||
|
||||
function %stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 168
|
||||
@@ -69,11 +75,12 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: la %r1, 168(%r2)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: aghi %r15, -168
|
||||
; nextln: aghi %r15, 168
|
||||
; nextln: br %r14
|
||||
; la %r1, 168(%r2)
|
||||
; clgrtle %r15, %r1
|
||||
; aghi %r15, -168
|
||||
; block0:
|
||||
; aghi %r15, 168
|
||||
; br %r14
|
||||
|
||||
function %large_stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 400000
|
||||
@@ -81,12 +88,13 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: clgrtle %r15, %r2
|
||||
; nextln: lay %r1, 400000(%r2)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: agfi %r15, -400000
|
||||
; nextln: agfi %r15, 400000
|
||||
; nextln: br %r14
|
||||
; clgrtle %r15, %r2
|
||||
; lay %r1, 400000(%r2)
|
||||
; clgrtle %r15, %r1
|
||||
; agfi %r15, -400000
|
||||
; block0:
|
||||
; agfi %r15, 400000
|
||||
; br %r14
|
||||
|
||||
function %huge_stack_limit(i64 stack_limit) {
|
||||
ss0 = explicit_slot 4000000
|
||||
@@ -94,13 +102,14 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: clgrtle %r15, %r2
|
||||
; nextln: lgr %r1, %r2
|
||||
; nextln: algfi %r1, 4000000
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: agfi %r15, -4000000
|
||||
; nextln: agfi %r15, 4000000
|
||||
; nextln: br %r14
|
||||
; clgrtle %r15, %r2
|
||||
; lgr %r1, %r2
|
||||
; algfi %r1, 4000000
|
||||
; clgrtle %r15, %r1
|
||||
; agfi %r15, -4000000
|
||||
; block0:
|
||||
; agfi %r15, 4000000
|
||||
; br %r14
|
||||
|
||||
function %limit_preamble(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -112,13 +121,14 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lg %r1, 0(%r2)
|
||||
; nextln: lg %r1, 4(%r1)
|
||||
; nextln: la %r1, 24(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: aghi %r15, -24
|
||||
; nextln: aghi %r15, 24
|
||||
; nextln: br %r14
|
||||
; lg %r1, 0(%r2)
|
||||
; lg %r1, 4(%r1)
|
||||
; la %r1, 24(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; aghi %r15, -24
|
||||
; block0:
|
||||
; aghi %r15, 24
|
||||
; br %r14
|
||||
|
||||
function %limit_preamble_large(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -130,14 +140,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lg %r1, 0(%r2)
|
||||
; nextln: lg %r1, 4(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: lay %r1, 400000(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: agfi %r15, -400000
|
||||
; nextln: agfi %r15, 400000
|
||||
; nextln: br %r14
|
||||
; lg %r1, 0(%r2)
|
||||
; lg %r1, 4(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; lay %r1, 400000(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; agfi %r15, -400000
|
||||
; block0:
|
||||
; agfi %r15, 400000
|
||||
; br %r14
|
||||
|
||||
function %limit_preamble_huge(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -149,14 +160,15 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lg %r1, 0(%r2)
|
||||
; nextln: lg %r1, 4(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: algfi %r1, 4000000
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: agfi %r15, -4000000
|
||||
; nextln: agfi %r15, 4000000
|
||||
; nextln: br %r14
|
||||
; lg %r1, 0(%r2)
|
||||
; lg %r1, 4(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; algfi %r1, 4000000
|
||||
; clgrtle %r15, %r1
|
||||
; agfi %r15, -4000000
|
||||
; block0:
|
||||
; agfi %r15, 4000000
|
||||
; br %r14
|
||||
|
||||
function %limit_preamble_huge_offset(i64 vmctx) {
|
||||
gv0 = vmctx
|
||||
@@ -167,9 +179,11 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lgfi %r1, 1000000 ; lg %r1, 0(%r1,%r2)
|
||||
; nextln: la %r1, 24(%r1)
|
||||
; nextln: clgrtle %r15, %r1
|
||||
; nextln: aghi %r15, -24
|
||||
; nextln: aghi %r15, 24
|
||||
; nextln: br %r14
|
||||
; lgfi %r1, 1000000 ; lg %r1, 0(%r1,%r2)
|
||||
; la %r1, 24(%r1)
|
||||
; clgrtle %r15, %r1
|
||||
; aghi %r15, -24
|
||||
; block0:
|
||||
; aghi %r15, 24
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
; FIXME: Should allocate register save area.
|
||||
@@ -11,10 +11,11 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: aghi %r15, -8
|
||||
; nextln: la %r2, 0(%r15)
|
||||
; nextln: aghi %r15, 8
|
||||
; nextln: br %r14
|
||||
; aghi %r15, -8
|
||||
; block0:
|
||||
; la %r2, 0(%r15)
|
||||
; aghi %r15, 8
|
||||
; br %r14
|
||||
|
||||
function %stack_addr_big() -> i64 {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -25,12 +26,11 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: agfi %r15, -100008
|
||||
; nextln: la %r2, 0(%r15)
|
||||
; nextln: agfi %r15, 100008
|
||||
; nextln: br %r14
|
||||
|
||||
; FIXME: don't use stack_addr legalization for stack_load and stack_store
|
||||
; agfi %r15, -100008
|
||||
; block0:
|
||||
; la %r2, 0(%r15)
|
||||
; agfi %r15, 100008
|
||||
; br %r14
|
||||
|
||||
function %stack_load_small() -> i64 {
|
||||
ss0 = explicit_slot 8
|
||||
@@ -40,11 +40,12 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: aghi %r15, -8
|
||||
; nextln: la %r2, 0(%r15)
|
||||
; nextln: lg %r2, 0(%r2)
|
||||
; nextln: aghi %r15, 8
|
||||
; nextln: br %r14
|
||||
; aghi %r15, -8
|
||||
; block0:
|
||||
; la %r4, 0(%r15)
|
||||
; lg %r2, 0(%r4)
|
||||
; aghi %r15, 8
|
||||
; br %r14
|
||||
|
||||
function %stack_load_big() -> i64 {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -55,12 +56,12 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: agfi %r15, -100008
|
||||
; nextln: la %r2, 0(%r15)
|
||||
; nextln: lg %r2, 0(%r2)
|
||||
; nextln: agfi %r15, 100008
|
||||
; nextln: br %r14
|
||||
|
||||
; agfi %r15, -100008
|
||||
; block0:
|
||||
; la %r4, 0(%r15)
|
||||
; lg %r2, 0(%r4)
|
||||
; agfi %r15, 100008
|
||||
; br %r14
|
||||
|
||||
function %stack_store_small(i64) {
|
||||
ss0 = explicit_slot 8
|
||||
@@ -70,11 +71,12 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: aghi %r15, -8
|
||||
; nextln: la %r3, 0(%r15)
|
||||
; nextln: stg %r2, 0(%r3)
|
||||
; nextln: aghi %r15, 8
|
||||
; nextln: br %r14
|
||||
; aghi %r15, -8
|
||||
; block0:
|
||||
; la %r4, 0(%r15)
|
||||
; stg %r2, 0(%r4)
|
||||
; aghi %r15, 8
|
||||
; br %r14
|
||||
|
||||
function %stack_store_big(i64) {
|
||||
ss0 = explicit_slot 100000
|
||||
@@ -85,9 +87,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: agfi %r15, -100008
|
||||
; nextln: la %r3, 0(%r15)
|
||||
; nextln: stg %r2, 0(%r3)
|
||||
; nextln: agfi %r15, 100008
|
||||
; nextln: br %r14
|
||||
; agfi %r15, -100008
|
||||
; block0:
|
||||
; la %r4, 0(%r15)
|
||||
; stg %r2, 0(%r4)
|
||||
; agfi %r15, 100008
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %store_i64(i64, i64) {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvg %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvg %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvg %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -28,9 +30,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lghi %r3, 12345
|
||||
; nextln: strvg %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r4, 12345
|
||||
; strvg %r4, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %istore8_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -38,8 +41,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -48,8 +52,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %istore16_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -57,8 +62,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvh %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvh %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore16_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -68,8 +74,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %istore16_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -78,8 +85,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 14640
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 14640
|
||||
; br %r14
|
||||
|
||||
function %istore32_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -87,8 +95,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strv %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strv %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore32_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -98,8 +107,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %istore32_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -108,9 +118,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lghi %r3, 12345
|
||||
; nextln: strv %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lghi %r4, 12345
|
||||
; strv %r4, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %store_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -118,8 +129,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strv %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strv %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -129,8 +141,9 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strv %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -139,9 +152,10 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: lhi %r3, 12345
|
||||
; nextln: strv %r3, 0(%r2)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; lhi %r4, 12345
|
||||
; strv %r4, 0(%r2)
|
||||
; br %r14
|
||||
|
||||
function %istore8_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -149,8 +163,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -159,8 +174,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %istore16_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -168,8 +184,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvh %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvh %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore16_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -179,8 +196,9 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %istore16_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -189,8 +207,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 14640
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 14640
|
||||
; br %r14
|
||||
|
||||
function %store_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -198,8 +217,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strvh %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strvh %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i16_sym(i16) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -209,8 +229,9 @@ block0(v0: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; check: larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r1, %sym + 0 ; strvh %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -219,8 +240,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 14640
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 14640
|
||||
; br %r14
|
||||
|
||||
function %istore8_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -228,8 +250,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -238,8 +261,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %store_i8(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -247,8 +271,9 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i8_off(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -256,8 +281,9 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stcy %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stcy %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i8(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -266,8 +292,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i8_off(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -276,6 +303,7 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mviy 4096(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mviy 4096(%r2), 123
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
function %store_i64(i64, i64) {
|
||||
@@ -7,8 +7,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stg %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stg %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -18,8 +19,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stgrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stgrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -28,8 +30,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvghi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvghi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %istore8_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -37,8 +40,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -47,8 +51,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %istore16_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -56,8 +61,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sth %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sth %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore16_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -67,8 +73,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sthrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sthrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %istore16_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -77,8 +84,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %istore32_i64(i64, i64) {
|
||||
block0(v0: i64, v1: i64):
|
||||
@@ -86,8 +94,9 @@ block0(v0: i64, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: st %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; st %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore32_i64_sym(i64) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -97,8 +106,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %istore32_imm_i64(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -107,8 +117,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %store_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -116,8 +127,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: st %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; st %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -127,8 +139,9 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: strl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; strl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %store_i32_off(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -136,8 +149,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sty %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sty %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -146,8 +160,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %istore8_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -155,8 +170,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -165,8 +181,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %istore16_i32(i32, i64) {
|
||||
block0(v0: i32, v1: i64):
|
||||
@@ -174,8 +191,9 @@ block0(v0: i32, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sth %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sth %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore16_i32_sym(i32) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -185,8 +203,9 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sthrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sthrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %istore16_imm_i32(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -195,8 +214,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %store_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -204,8 +224,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sth %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sth %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i16_sym(i16) {
|
||||
gv0 = symbol colocated %sym
|
||||
@@ -215,8 +236,9 @@ block0(v0: i16):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sthrl %r2, %sym + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sthrl %r2, %sym + 0
|
||||
; br %r14
|
||||
|
||||
function %store_i16_off(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -224,8 +246,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: sthy %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; sthy %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -234,8 +257,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvhhi 0(%r2), 12345
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvhhi 0(%r2), 12345
|
||||
; br %r14
|
||||
|
||||
function %istore8_i16(i16, i64) {
|
||||
block0(v0: i16, v1: i64):
|
||||
@@ -243,8 +267,9 @@ block0(v0: i16, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %istore8_imm_i16(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -253,8 +278,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %store_i8(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -262,8 +288,9 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stc %r2, 0(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stc %r2, 0(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_i8_off(i8, i64) {
|
||||
block0(v0: i8, v1: i64):
|
||||
@@ -271,8 +298,9 @@ block0(v0: i8, v1: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: stcy %r2, 4096(%r3)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; stcy %r2, 4096(%r3)
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i8(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -281,8 +309,9 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mvi 0(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mvi 0(%r2), 123
|
||||
; br %r14
|
||||
|
||||
function %store_imm_i8_off(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -291,6 +320,7 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; check: mviy 4096(%r2), 123
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; mviy 4096(%r2), 123
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -13,8 +13,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data %my_global + 0 ; lg %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 12 ; data %my_global + 0 ; lg %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %symbol_value_colocated() -> i64 {
|
||||
gv0 = symbol colocated %my_global_colo
|
||||
@@ -24,12 +25,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: larl %r2, %my_global_colo + 0
|
||||
; nextln: br %r14
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FUNC_ADDR
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; larl %r2, %my_global_colo + 0
|
||||
; br %r14
|
||||
|
||||
function %func_addr() -> i64 {
|
||||
fn0 = %my_func(i64) -> i64
|
||||
@@ -39,8 +37,9 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: bras %r1, 12 ; data %my_func + 0 ; lg %r2, 0(%r1)
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; bras %r1, 12 ; data %my_func + 0 ; lg %r2, 0(%r1)
|
||||
; br %r14
|
||||
|
||||
function %func_addr_colocated() -> i64 {
|
||||
fn0 = colocated %my_func_colo(i64) -> i64
|
||||
@@ -50,5 +49,7 @@ block0:
|
||||
return v0
|
||||
}
|
||||
|
||||
; check: larl %r2, %my_func_colo + 0
|
||||
; nextln: br %r14
|
||||
; block0:
|
||||
; larl %r2, %my_func_colo + 0
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
test compile
|
||||
test compile precise-output
|
||||
target s390x
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -10,18 +10,16 @@ block0:
|
||||
trap user0
|
||||
}
|
||||
|
||||
; check: trap
|
||||
; block0:
|
||||
; trap
|
||||
|
||||
function %resumable_trap() {
|
||||
block0:
|
||||
trap user0
|
||||
}
|
||||
|
||||
; check: trap
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; TRAPZ
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; trap
|
||||
|
||||
function %trapz(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -31,18 +29,13 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; FIXME: Does not use TrapIf internally as trapz is expanded.
|
||||
; check: Block 0
|
||||
; check: clgfi %r2, 42
|
||||
; nextln: jge label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: br %r14
|
||||
; check: Block 2:
|
||||
; check: trap
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; TRAPNZ/RESUMABLE_TRAPNZ
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; clgfi %r2, 42
|
||||
; jge label1 ; jg label2
|
||||
; block1:
|
||||
; br %r14
|
||||
; block2:
|
||||
; trap
|
||||
|
||||
function %trapnz(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -52,14 +45,13 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; FIXME: Does not use TrapIf internally as trapnz is expanded.
|
||||
; check: Block 0
|
||||
; check: clgfi %r2, 42
|
||||
; nextln: jgne label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: br %r14
|
||||
; check: Block 2:
|
||||
; check: trap
|
||||
; block0:
|
||||
; clgfi %r2, 42
|
||||
; jgne label1 ; jg label2
|
||||
; block1:
|
||||
; br %r14
|
||||
; block2:
|
||||
; trap
|
||||
|
||||
function %resumable_trapnz(i64) {
|
||||
block0(v0: i64):
|
||||
@@ -69,18 +61,13 @@ block0(v0: i64):
|
||||
return
|
||||
}
|
||||
|
||||
; FIXME: Does not use TrapIf internally as resumable_trapnz is expanded.
|
||||
; check: Block 0
|
||||
; check: clgfi %r2, 42
|
||||
; nextln: jgne label1 ; jg label2
|
||||
; check: Block 1:
|
||||
; check: br %r14
|
||||
; check: Block 2:
|
||||
; check: trap
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; DEBUGTRAP
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; block0:
|
||||
; clgfi %r2, 42
|
||||
; jgne label1 ; jg label2
|
||||
; block1:
|
||||
; br %r14
|
||||
; block2:
|
||||
; trap
|
||||
|
||||
function %h() {
|
||||
block0:
|
||||
@@ -88,4 +75,7 @@ block0:
|
||||
return
|
||||
}
|
||||
|
||||
; check: debugtrap
|
||||
; block0:
|
||||
; debugtrap
|
||||
; br %r14
|
||||
|
||||
|
||||
@@ -8,19 +8,13 @@ block0(v0: i64, v1: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 0(%rdi,%rsi,1), %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 0(%rdi,%rsi,1), %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %amode_add_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -30,19 +24,13 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 42(%rdi), %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 42(%rdi), %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %amode_add_imm_order(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -52,19 +40,13 @@ block0(v0: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 42(%rdi), %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 42(%rdi), %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %amode_add_uext_imm(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -75,17 +57,11 @@ block0(v0: i64):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 42(%rdi), %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 42(%rdi), %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,21 +7,15 @@ block0(v0: b1, v1: i32, v2: i32):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: testb $1, %dil
|
||||
; Inst 3: movl %edx, %edi
|
||||
; Inst 4: cmovnzl %esi, %edi
|
||||
; Inst 5: movq %rdi, %rax
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; testb $1, %dil
|
||||
; cmovnzl %esi, %edx, %edx
|
||||
; movq %rdx, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f1(b1) -> i32 {
|
||||
block0(v0: b1):
|
||||
@@ -35,32 +29,21 @@ block2:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: testb $1, %dil
|
||||
; Inst 3: jnz label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: movl $1, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $2, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; testb $1, %dil
|
||||
; jnz label1; j label2
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f2(b1) -> i32 {
|
||||
block0(v0: b1):
|
||||
@@ -74,30 +57,19 @@ block2:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: testb $1, %dil
|
||||
; Inst 3: jz label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: movl $1, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $2, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; testb $1, %dil
|
||||
; jz label1; j label2
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,17 +7,12 @@ block0(v0: i32, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: addl %esi, %edi
|
||||
; Inst 3: movq %rdi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; addl %edi, %esi, %edi
|
||||
; movq %rdi, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,17 +7,11 @@ block0(v0: b8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movsbq %dil, %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movsbq %dil, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -16,32 +16,21 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: cmpl %esi, %edi
|
||||
; Inst 3: jz label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: movl $1, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $2, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; cmpl %esi, %edi
|
||||
; jz label1; j label2
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f1(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -58,32 +47,21 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: cmpl %esi, %edi
|
||||
; Inst 3: jnz label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: movl $1, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $2, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; cmpl %esi, %edi
|
||||
; jnz label1; j label2
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f2(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
@@ -100,32 +78,21 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: cmpl %esi, %edi
|
||||
; Inst 3: jz label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: movl $1, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $2, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; cmpl %esi, %edi
|
||||
; jz label1; j label2
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f3(f32, f32) -> i32 {
|
||||
block0(v0: f32, v1: f32):
|
||||
@@ -142,31 +109,20 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 2)
|
||||
; (successor: Block 1)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: ucomiss %xmm1, %xmm0
|
||||
; Inst 3: jp label2
|
||||
; Inst 4: jnz label2; j label1
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 5 .. 9)
|
||||
; Inst 5: movl $1, %eax
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 9 .. 13)
|
||||
; Inst 9: movl $2, %eax
|
||||
; Inst 10: movq %rbp, %rsp
|
||||
; Inst 11: popq %rbp
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; ucomiss %xmm1, %xmm0
|
||||
; jp label2
|
||||
; jnz label2; j label1
|
||||
; block1:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $2, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -9,23 +9,19 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $32, %rsp
|
||||
; Inst 3: virtual_sp_offset_adjust 32
|
||||
; Inst 4: movq %rdi, %rcx
|
||||
; Inst 5: call *%rdi
|
||||
; Inst 6: addq $32, %rsp
|
||||
; Inst 7: virtual_sp_offset_adjust -32
|
||||
; Inst 8: movq %rbp, %rsp
|
||||
; Inst 9: popq %rbp
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; subq %rsp, $32, %rsp
|
||||
; virtual_sp_offset_adjust 32
|
||||
; movq %rdi, %rcx
|
||||
; movq %rcx, %rdi
|
||||
; call *%rdi
|
||||
; addq %rsp, $32, %rsp
|
||||
; virtual_sp_offset_adjust -32
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %two_args(i32, f32) system_v {
|
||||
;; system_v has params in %rdi, %xmm0, fascall in %rcx, %xmm1
|
||||
@@ -37,29 +33,26 @@ block0(v0: i32, v1: f32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 17)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdi, %rsi
|
||||
; Inst 3: movaps %xmm0, %xmm6
|
||||
; Inst 4: subq $32, %rsp
|
||||
; Inst 5: virtual_sp_offset_adjust 32
|
||||
; Inst 6: movq %rsi, %rcx
|
||||
; Inst 7: movaps %xmm6, %xmm1
|
||||
; Inst 8: call *%rsi
|
||||
; Inst 9: addq $32, %rsp
|
||||
; Inst 10: virtual_sp_offset_adjust -32
|
||||
; Inst 11: movq %rsi, %rdi
|
||||
; Inst 12: movaps %xmm6, %xmm0
|
||||
; Inst 13: call *%rsi
|
||||
; Inst 14: movq %rbp, %rsp
|
||||
; Inst 15: popq %rbp
|
||||
; Inst 16: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; movdqa %xmm0, %xmm6
|
||||
; subq %rsp, $32, %rsp
|
||||
; virtual_sp_offset_adjust 32
|
||||
; movq %rax, %rcx
|
||||
; movdqa %xmm6, %xmm1
|
||||
; movq %rax, %rdi
|
||||
; movdqa %xmm1, %xmm6
|
||||
; call *%rdi
|
||||
; addq %rsp, $32, %rsp
|
||||
; virtual_sp_offset_adjust -32
|
||||
; movq %rdi, %rax
|
||||
; movdqa %xmm6, %xmm0
|
||||
; call *%rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %fastcall_to_systemv(i32) windows_fastcall {
|
||||
;; fastcall preserves xmm6+, rbx, rbp, rdi, rsi, r12-r15
|
||||
@@ -70,44 +63,39 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 32)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $176, %rsp
|
||||
; Inst 3: movdqu %xmm6, 0(%rsp)
|
||||
; Inst 4: movdqu %xmm7, 16(%rsp)
|
||||
; Inst 5: movdqu %xmm8, 32(%rsp)
|
||||
; Inst 6: movdqu %xmm9, 48(%rsp)
|
||||
; Inst 7: movdqu %xmm10, 64(%rsp)
|
||||
; Inst 8: movdqu %xmm11, 80(%rsp)
|
||||
; Inst 9: movdqu %xmm12, 96(%rsp)
|
||||
; Inst 10: movdqu %xmm13, 112(%rsp)
|
||||
; Inst 11: movdqu %xmm14, 128(%rsp)
|
||||
; Inst 12: movdqu %xmm15, 144(%rsp)
|
||||
; Inst 13: movq %rsi, 160(%rsp)
|
||||
; Inst 14: movq %rdi, 168(%rsp)
|
||||
; Inst 15: call *%rcx
|
||||
; Inst 16: movdqu 0(%rsp), %xmm6
|
||||
; Inst 17: movdqu 16(%rsp), %xmm7
|
||||
; Inst 18: movdqu 32(%rsp), %xmm8
|
||||
; Inst 19: movdqu 48(%rsp), %xmm9
|
||||
; Inst 20: movdqu 64(%rsp), %xmm10
|
||||
; Inst 21: movdqu 80(%rsp), %xmm11
|
||||
; Inst 22: movdqu 96(%rsp), %xmm12
|
||||
; Inst 23: movdqu 112(%rsp), %xmm13
|
||||
; Inst 24: movdqu 128(%rsp), %xmm14
|
||||
; Inst 25: movdqu 144(%rsp), %xmm15
|
||||
; Inst 26: movq 160(%rsp), %rsi
|
||||
; Inst 27: movq 168(%rsp), %rdi
|
||||
; Inst 28: addq $176, %rsp
|
||||
; Inst 29: movq %rbp, %rsp
|
||||
; Inst 30: popq %rbp
|
||||
; Inst 31: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $176, %rsp
|
||||
; movq %rsi, 0(%rsp)
|
||||
; movq %rdi, 8(%rsp)
|
||||
; movdqu %xmm6, 16(%rsp)
|
||||
; movdqu %xmm7, 32(%rsp)
|
||||
; movdqu %xmm8, 48(%rsp)
|
||||
; movdqu %xmm9, 64(%rsp)
|
||||
; movdqu %xmm10, 80(%rsp)
|
||||
; movdqu %xmm11, 96(%rsp)
|
||||
; movdqu %xmm12, 112(%rsp)
|
||||
; movdqu %xmm13, 128(%rsp)
|
||||
; movdqu %xmm14, 144(%rsp)
|
||||
; movdqu %xmm15, 160(%rsp)
|
||||
; block0:
|
||||
; call *%rcx
|
||||
; movq 0(%rsp), %rsi
|
||||
; movq 8(%rsp), %rdi
|
||||
; movdqu 16(%rsp), %xmm6
|
||||
; movdqu 32(%rsp), %xmm7
|
||||
; movdqu 48(%rsp), %xmm8
|
||||
; movdqu 64(%rsp), %xmm9
|
||||
; movdqu 80(%rsp), %xmm10
|
||||
; movdqu 96(%rsp), %xmm11
|
||||
; movdqu 112(%rsp), %xmm12
|
||||
; movdqu 128(%rsp), %xmm13
|
||||
; movdqu 144(%rsp), %xmm14
|
||||
; movdqu 160(%rsp), %xmm15
|
||||
; addq %rsp, $176, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %many_args(
|
||||
;; rdi, rsi, rdx, rcx, r8, r9,
|
||||
@@ -139,56 +127,58 @@ block0(
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 44)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $32, %rsp
|
||||
; Inst 3: movq %r12, 0(%rsp)
|
||||
; Inst 4: movq %r13, 8(%rsp)
|
||||
; Inst 5: movq %r14, 16(%rsp)
|
||||
; Inst 6: movq %rdx, %rax
|
||||
; Inst 7: movq %rcx, %r10
|
||||
; Inst 8: movq %r8, %r11
|
||||
; Inst 9: movq %r9, %r12
|
||||
; Inst 10: movq 16(%rbp), %r13
|
||||
; Inst 11: movq 24(%rbp), %r14
|
||||
; Inst 12: movss 32(%rbp), %xmm8
|
||||
; Inst 13: movsd 40(%rbp), %xmm9
|
||||
; Inst 14: subq $144, %rsp
|
||||
; Inst 15: virtual_sp_offset_adjust 144
|
||||
; Inst 16: movq %rdi, %rcx
|
||||
; Inst 17: movq %rsi, %rdx
|
||||
; Inst 18: movq %rax, %r8
|
||||
; Inst 19: movq %r10, %r9
|
||||
; Inst 20: movq %r11, 32(%rsp)
|
||||
; Inst 21: movq %r12, 40(%rsp)
|
||||
; Inst 22: movsd %xmm0, 48(%rsp)
|
||||
; Inst 23: movsd %xmm1, 56(%rsp)
|
||||
; Inst 24: movsd %xmm2, 64(%rsp)
|
||||
; Inst 25: movsd %xmm3, 72(%rsp)
|
||||
; Inst 26: movsd %xmm4, 80(%rsp)
|
||||
; Inst 27: movsd %xmm5, 88(%rsp)
|
||||
; Inst 28: movsd %xmm6, 96(%rsp)
|
||||
; Inst 29: movsd %xmm7, 104(%rsp)
|
||||
; Inst 30: movq %r13, 112(%rsp)
|
||||
; Inst 31: movl %r14d, 120(%rsp)
|
||||
; Inst 32: movss %xmm8, 128(%rsp)
|
||||
; Inst 33: movsd %xmm9, 136(%rsp)
|
||||
; Inst 34: call *%rdi
|
||||
; Inst 35: addq $144, %rsp
|
||||
; Inst 36: virtual_sp_offset_adjust -144
|
||||
; Inst 37: movq 0(%rsp), %r12
|
||||
; Inst 38: movq 8(%rsp), %r13
|
||||
; Inst 39: movq 16(%rsp), %r14
|
||||
; Inst 40: addq $32, %rsp
|
||||
; Inst 41: movq %rbp, %rsp
|
||||
; Inst 42: popq %rbp
|
||||
; Inst 43: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $96, %rsp
|
||||
; movq %rbx, 48(%rsp)
|
||||
; movq %r12, 56(%rsp)
|
||||
; movq %r13, 64(%rsp)
|
||||
; movq %r14, 72(%rsp)
|
||||
; movq %r15, 80(%rsp)
|
||||
; block0:
|
||||
; movq %rsi, %rbx
|
||||
; movq %rdx, %r14
|
||||
; movq %rcx, %r12
|
||||
; movq %r8, %r13
|
||||
; movq %r9, %r15
|
||||
; movq 16(%rbp), %rax
|
||||
; movq 24(%rbp), %r11
|
||||
; movss 32(%rbp), %xmm9
|
||||
; movsd 40(%rbp), %xmm8
|
||||
; subq %rsp, $144, %rsp
|
||||
; virtual_sp_offset_adjust 144
|
||||
; movq %rdi, %rcx
|
||||
; movq %rbx, %rdx
|
||||
; movq %r14, %r8
|
||||
; movq %r12, %r9
|
||||
; movq %r13, %rsi
|
||||
; movq %rsi, 32(%rsp)
|
||||
; movq %r15, %rsi
|
||||
; movq %rsi, 40(%rsp)
|
||||
; movsd %xmm0, 48(%rsp)
|
||||
; movsd %xmm1, 56(%rsp)
|
||||
; movsd %xmm2, 64(%rsp)
|
||||
; movsd %xmm3, 72(%rsp)
|
||||
; movsd %xmm4, 80(%rsp)
|
||||
; movsd %xmm5, 88(%rsp)
|
||||
; movsd %xmm6, 96(%rsp)
|
||||
; movsd %xmm7, 104(%rsp)
|
||||
; movq %rax, 112(%rsp)
|
||||
; movl %r11d, 120(%rsp)
|
||||
; movss %xmm9, 128(%rsp)
|
||||
; movsd %xmm8, 136(%rsp)
|
||||
; call *%rdi
|
||||
; addq %rsp, $144, %rsp
|
||||
; virtual_sp_offset_adjust -144
|
||||
; movq 48(%rsp), %rbx
|
||||
; movq 56(%rsp), %r12
|
||||
; movq 64(%rsp), %r13
|
||||
; movq 72(%rsp), %r14
|
||||
; movq 80(%rsp), %r15
|
||||
; addq %rsp, $96, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %many_ints(i64, i64, i64, i64, i64) system_v {
|
||||
;; rdi => rcx
|
||||
@@ -202,29 +192,31 @@ block0(v0: i64, v1:i64, v2:i64, v3:i64, v4:i64):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 17)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdx, %rax
|
||||
; Inst 3: movq %rcx, %r9
|
||||
; Inst 4: movq %r8, %r10
|
||||
; Inst 5: subq $48, %rsp
|
||||
; Inst 6: virtual_sp_offset_adjust 48
|
||||
; Inst 7: movq %rdi, %rcx
|
||||
; Inst 8: movq %rsi, %rdx
|
||||
; Inst 9: movq %rax, %r8
|
||||
; Inst 10: movq %r10, 32(%rsp)
|
||||
; Inst 11: call *%rdi
|
||||
; Inst 12: addq $48, %rsp
|
||||
; Inst 13: virtual_sp_offset_adjust -48
|
||||
; Inst 14: movq %rbp, %rsp
|
||||
; Inst 15: popq %rbp
|
||||
; Inst 16: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $16, %rsp
|
||||
; movq %rbx, 0(%rsp)
|
||||
; block0:
|
||||
; movq %rsi, %r11
|
||||
; movq %rdx, %r9
|
||||
; movq %rcx, %rax
|
||||
; movq %r8, %rbx
|
||||
; subq %rsp, $48, %rsp
|
||||
; virtual_sp_offset_adjust 48
|
||||
; movq %rdi, %rcx
|
||||
; movq %r11, %rdx
|
||||
; movq %r9, %r8
|
||||
; movq %rax, %r9
|
||||
; movq %rbx, %r11
|
||||
; movq %r11, 32(%rsp)
|
||||
; call *%rdi
|
||||
; addq %rsp, $48, %rsp
|
||||
; virtual_sp_offset_adjust -48
|
||||
; movq 0(%rsp), %rbx
|
||||
; addq %rsp, $16, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %many_args2(i32, f32, i64, f64, i32, i32, i32, f32, f64, f32, f64) system_v {
|
||||
sig0 = (i32, f32, i64, f64, i32, i32, i32, f32, f64, f32, f64) windows_fastcall
|
||||
@@ -233,37 +225,37 @@ block0(v0: i32, v1: f32, v2: i64, v3: f64, v4: i32, v5: i32, v6: i32, v7: f32, v
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 25)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movaps %xmm1, %xmm6
|
||||
; Inst 3: movq %rcx, %rax
|
||||
; Inst 4: movq %r8, %r9
|
||||
; Inst 5: movaps %xmm3, %xmm7
|
||||
; Inst 6: subq $96, %rsp
|
||||
; Inst 7: virtual_sp_offset_adjust 96
|
||||
; Inst 8: movq %rdi, %rcx
|
||||
; Inst 9: movaps %xmm0, %xmm1
|
||||
; Inst 10: movq %rsi, %r8
|
||||
; Inst 11: movaps %xmm6, %xmm3
|
||||
; Inst 12: movl %edx, 32(%rsp)
|
||||
; Inst 13: movl %eax, 40(%rsp)
|
||||
; Inst 14: movl %r9d, 48(%rsp)
|
||||
; Inst 15: movss %xmm2, 56(%rsp)
|
||||
; Inst 16: movsd %xmm7, 64(%rsp)
|
||||
; Inst 17: movss %xmm4, 72(%rsp)
|
||||
; Inst 18: movsd %xmm5, 80(%rsp)
|
||||
; Inst 19: call *%rdi
|
||||
; Inst 20: addq $96, %rsp
|
||||
; Inst 21: virtual_sp_offset_adjust -96
|
||||
; Inst 22: movq %rbp, %rsp
|
||||
; Inst 23: popq %rbp
|
||||
; Inst 24: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm6
|
||||
; movq %rsi, %rax
|
||||
; movdqa %xmm1, %xmm14
|
||||
; movq %rcx, %r11
|
||||
; movq %r8, %r9
|
||||
; movdqa %xmm3, %xmm10
|
||||
; subq %rsp, $96, %rsp
|
||||
; virtual_sp_offset_adjust 96
|
||||
; movq %rdi, %rcx
|
||||
; movdqa %xmm6, %xmm1
|
||||
; movq %rax, %r8
|
||||
; movdqa %xmm14, %xmm3
|
||||
; movl %edx, 32(%rsp)
|
||||
; movq %r11, %rdx
|
||||
; movl %edx, 40(%rsp)
|
||||
; movq %r9, %rax
|
||||
; movl %eax, 48(%rsp)
|
||||
; movss %xmm2, 56(%rsp)
|
||||
; movdqa %xmm10, %xmm2
|
||||
; movsd %xmm2, 64(%rsp)
|
||||
; movss %xmm4, 72(%rsp)
|
||||
; movsd %xmm5, 80(%rsp)
|
||||
; call *%rdi
|
||||
; addq %rsp, $96, %rsp
|
||||
; virtual_sp_offset_adjust -96
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix1(i32) wasmtime_system_v {
|
||||
sig0 = (i32) system_v
|
||||
@@ -272,20 +264,14 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdi, %rsi
|
||||
; Inst 3: movq %rsi, %rdi
|
||||
; Inst 4: call *%rsi
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rcx
|
||||
; call *%rcx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix2(i32) system_v {
|
||||
sig0 = (i32) wasmtime_system_v
|
||||
@@ -294,20 +280,14 @@ block0(v0: i32):
|
||||
return
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdi, %rsi
|
||||
; Inst 3: movq %rsi, %rdi
|
||||
; Inst 4: call *%rsi
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rcx
|
||||
; call *%rcx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix2() -> i32, i32 system_v {
|
||||
sig0 = () -> i32, i32 wasmtime_system_v
|
||||
@@ -317,26 +297,20 @@ block0:
|
||||
return v0, v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 14)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl $1, %esi
|
||||
; Inst 3: subq $16, %rsp
|
||||
; Inst 4: virtual_sp_offset_adjust 16
|
||||
; Inst 5: lea 0(%rsp), %rdi
|
||||
; Inst 6: call *%rsi
|
||||
; Inst 7: movq 0(%rsp), %rsi
|
||||
; Inst 8: addq $16, %rsp
|
||||
; Inst 9: virtual_sp_offset_adjust -16
|
||||
; Inst 10: movq %rsi, %rdx
|
||||
; Inst 11: movq %rbp, %rsp
|
||||
; Inst 12: popq %rbp
|
||||
; Inst 13: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movl $1, %edx
|
||||
; subq %rsp, $16, %rsp
|
||||
; virtual_sp_offset_adjust 16
|
||||
; lea 0(%rsp), %rdi
|
||||
; call *%rdx
|
||||
; movq 0(%rsp), %rdx
|
||||
; addq %rsp, $16, %rsp
|
||||
; virtual_sp_offset_adjust -16
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix3() -> i32, i32 wasmtime_system_v {
|
||||
sig0 = () -> i32, i32 system_v
|
||||
@@ -346,25 +320,21 @@ block0:
|
||||
return v0, v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $16, %rsp
|
||||
; Inst 3: movq %r12, 0(%rsp)
|
||||
; Inst 4: movq %rdi, %r12
|
||||
; Inst 5: movl $1, %esi
|
||||
; Inst 6: call *%rsi
|
||||
; Inst 7: movl %edx, 0(%r12)
|
||||
; Inst 8: movq 0(%rsp), %r12
|
||||
; Inst 9: addq $16, %rsp
|
||||
; Inst 10: movq %rbp, %rsp
|
||||
; Inst 11: popq %rbp
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $16, %rsp
|
||||
; movq %r13, 0(%rsp)
|
||||
; block0:
|
||||
; movq %rdi, %r13
|
||||
; movl $1, %r9d
|
||||
; call *%r9
|
||||
; movq %r13, %rdi
|
||||
; movl %edx, 0(%rdi)
|
||||
; movq 0(%rsp), %r13
|
||||
; addq %rsp, $16, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix4() -> i32, i64, i32 wasmtime_system_v {
|
||||
sig0 = () -> i32, i64, i32 system_v
|
||||
@@ -374,32 +344,28 @@ block0:
|
||||
return v0, v1, v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 20)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $16, %rsp
|
||||
; Inst 3: movq %r12, 0(%rsp)
|
||||
; Inst 4: movq %rdi, %r12
|
||||
; Inst 5: movl $1, %esi
|
||||
; Inst 6: subq $16, %rsp
|
||||
; Inst 7: virtual_sp_offset_adjust 16
|
||||
; Inst 8: lea 0(%rsp), %rdi
|
||||
; Inst 9: call *%rsi
|
||||
; Inst 10: movq 0(%rsp), %rsi
|
||||
; Inst 11: addq $16, %rsp
|
||||
; Inst 12: virtual_sp_offset_adjust -16
|
||||
; Inst 13: movq %rdx, 0(%r12)
|
||||
; Inst 14: movl %esi, 8(%r12)
|
||||
; Inst 15: movq 0(%rsp), %r12
|
||||
; Inst 16: addq $16, %rsp
|
||||
; Inst 17: movq %rbp, %rsp
|
||||
; Inst 18: popq %rbp
|
||||
; Inst 19: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $16, %rsp
|
||||
; movq %rbx, 0(%rsp)
|
||||
; block0:
|
||||
; movq %rdi, %rbx
|
||||
; movl $1, %esi
|
||||
; subq %rsp, $16, %rsp
|
||||
; virtual_sp_offset_adjust 16
|
||||
; lea 0(%rsp), %rdi
|
||||
; call *%rsi
|
||||
; movq 0(%rsp), %rcx
|
||||
; addq %rsp, $16, %rsp
|
||||
; virtual_sp_offset_adjust -16
|
||||
; movq %rbx, %rdi
|
||||
; movq %rdx, 0(%rdi)
|
||||
; movl %ecx, 8(%rdi)
|
||||
; movq 0(%rsp), %rbx
|
||||
; addq %rsp, $16, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix5() -> f32, i64, i32, f32 wasmtime_system_v {
|
||||
sig0 = () -> f32, i64, i32, f32 system_v
|
||||
@@ -409,27 +375,23 @@ block0:
|
||||
return v0, v1, v2, v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 15)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $16, %rsp
|
||||
; Inst 3: movq %r12, 0(%rsp)
|
||||
; Inst 4: movq %rdi, %r12
|
||||
; Inst 5: movl $1, %esi
|
||||
; Inst 6: call *%rsi
|
||||
; Inst 7: movq %rax, 0(%r12)
|
||||
; Inst 8: movl %edx, 8(%r12)
|
||||
; Inst 9: movss %xmm1, 12(%r12)
|
||||
; Inst 10: movq 0(%rsp), %r12
|
||||
; Inst 11: addq $16, %rsp
|
||||
; Inst 12: movq %rbp, %rsp
|
||||
; Inst 13: popq %rbp
|
||||
; Inst 14: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $16, %rsp
|
||||
; movq %r12, 0(%rsp)
|
||||
; block0:
|
||||
; movq %rdi, %r12
|
||||
; movl $1, %eax
|
||||
; call *%rax
|
||||
; movq %r12, %rdi
|
||||
; movq %rax, 0(%rdi)
|
||||
; movl %edx, 8(%rdi)
|
||||
; movss %xmm1, 12(%rdi)
|
||||
; movq 0(%rsp), %r12
|
||||
; addq %rsp, $16, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %wasmtime_mix6(f32, i64, i32, f32) -> f32, i64, i32, f32 wasmtime_system_v {
|
||||
sig0 = (f32, i64, i32, f32) -> f32, i64, i32, f32 system_v
|
||||
@@ -439,25 +401,21 @@ block0(v0: f32, v1: i64, v2: i32, v3: f32):
|
||||
return v5, v6, v7, v8
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 15)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: subq $16, %rsp
|
||||
; Inst 3: movq %r12, 0(%rsp)
|
||||
; Inst 4: movq %rdx, %r12
|
||||
; Inst 5: movl $1, %eax
|
||||
; Inst 6: call *%rax
|
||||
; Inst 7: movq %rax, 0(%r12)
|
||||
; Inst 8: movl %edx, 8(%r12)
|
||||
; Inst 9: movss %xmm1, 12(%r12)
|
||||
; Inst 10: movq 0(%rsp), %r12
|
||||
; Inst 11: addq $16, %rsp
|
||||
; Inst 12: movq %rbp, %rsp
|
||||
; Inst 13: popq %rbp
|
||||
; Inst 14: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; subq %rsp, $16, %rsp
|
||||
; movq %rbx, 0(%rsp)
|
||||
; block0:
|
||||
; movq %rdx, %rbx
|
||||
; movl $1, %eax
|
||||
; call *%rax
|
||||
; movq %rbx, %rcx
|
||||
; movq %rax, 0(%rcx)
|
||||
; movl %edx, 8(%rcx)
|
||||
; movss %xmm1, 12(%rcx)
|
||||
; movq 0(%rsp), %rbx
|
||||
; addq %rsp, $16, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,19 +7,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: lzcntq %rdi, %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; lzcntq %rdi, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %clz(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -27,17 +21,11 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: lzcntl %edi, %esi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; lzcntl %edi, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,25 +10,19 @@ block0(v0: i64, v1: i64):
|
||||
return v4, v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 0(%rsi), %rax
|
||||
; Inst 3: cmpq %rax, %rdi
|
||||
; Inst 4: setz %cl
|
||||
; Inst 5: andq $1, %rcx
|
||||
; Inst 6: cmpq %rax, %rdi
|
||||
; Inst 7: cmovzq %rdi, %rsi
|
||||
; Inst 8: movq %rcx, %rax
|
||||
; Inst 9: movq %rsi, %rdx
|
||||
; Inst 10: movq %rbp, %rsp
|
||||
; Inst 11: popq %rbp
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 0(%rsi), %rcx
|
||||
; cmpq %rcx, %rdi
|
||||
; setz %al
|
||||
; andq %rax, $1, %rax
|
||||
; cmpq %rcx, %rdi
|
||||
; cmovzq %rdi, %rsi, %rsi
|
||||
; movq %rsi, %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f1(f64, i64) -> i64, f64 {
|
||||
block0(v0: f64, v1: i64):
|
||||
@@ -39,27 +33,20 @@ block0(v0: f64, v1: i64):
|
||||
return v4, v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 17)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movsd 0(%rdi), %xmm1
|
||||
; Inst 3: ucomisd %xmm1, %xmm0
|
||||
; Inst 4: setnp %sil
|
||||
; Inst 5: setz %dil
|
||||
; Inst 6: andl %edi, %esi
|
||||
; Inst 7: andq $1, %rsi
|
||||
; Inst 8: ucomisd %xmm0, %xmm1
|
||||
; Inst 9: movaps %xmm0, %xmm1
|
||||
; Inst 10: jz $next; movsd %xmm0, %xmm1; $next:
|
||||
; Inst 11: jnp $next; movsd %xmm0, %xmm1; $next:
|
||||
; Inst 12: movq %rsi, %rax
|
||||
; Inst 13: movaps %xmm1, %xmm0
|
||||
; Inst 14: movq %rbp, %rsp
|
||||
; Inst 15: popq %rbp
|
||||
; Inst 16: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movsd 0(%rdi), %xmm12
|
||||
; ucomisd %xmm12, %xmm0
|
||||
; setnp %al
|
||||
; setz %r8b
|
||||
; andl %eax, %r8d, %eax
|
||||
; andq %rax, $1, %rax
|
||||
; ucomisd %xmm0, %xmm12
|
||||
; movdqa %xmm0, %xmm6
|
||||
; mov z, sd; j%xmm6 $next; mov%xmm0 %xmm0, %xmm0; $next:
|
||||
; mov np, sd; j%xmm6 $next; mov%xmm0 %xmm0, %xmm0; $next:
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,19 +7,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: tzcntq %rdi, %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; tzcntq %rdi, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %ctz(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -27,17 +21,11 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: tzcntl %edi, %esi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; tzcntl %edi, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ block0(v0: i8, v1: i8):
|
||||
v2 = srem.i8 v0, v1
|
||||
; check: movq %rdi, %rax
|
||||
; nextln: movl $$0, %edx
|
||||
; nextln: srem $$rax:$$rdx, %sil
|
||||
; nextln: shrq $$8, %rax
|
||||
; nextln: srem_seq %al, %dl, %sil, %al, %dl, tmp=(none)
|
||||
; nextln: shrq $$8, %rax, %rax
|
||||
|
||||
return v2
|
||||
}
|
||||
@@ -23,7 +23,7 @@ block0(v0: i16, v1: i16):
|
||||
v2 = srem.i16 v0, v1
|
||||
; check: movq %rdi, %rax
|
||||
; nextln: movl $$0, %edx
|
||||
; nextln: srem $$rax:$$rdx, %si
|
||||
; nextln: srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none)
|
||||
; nextln: movq %rdx, %rax
|
||||
|
||||
return v2
|
||||
@@ -34,7 +34,7 @@ block0(v0: i32, v1: i32):
|
||||
v2 = srem.i32 v0, v1
|
||||
; check: movq %rdi, %rax
|
||||
; nextln: movl $$0, %edx
|
||||
; nextln: srem $$rax:$$rdx, %esi
|
||||
; nextln: srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none)
|
||||
; nextln: movq %rdx, %rax
|
||||
|
||||
return v2
|
||||
@@ -45,7 +45,7 @@ block0(v0: i64, v1: i64):
|
||||
v2 = srem.i64 v0, v1
|
||||
; check: movq %rdi, %rax
|
||||
; nextln: movl $$0, %edx
|
||||
; nextln: srem $$rax:$$rdx, %rsi
|
||||
; nextln: srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none)
|
||||
; nextln: movq %rdx, %rax
|
||||
|
||||
return v2
|
||||
|
||||
@@ -8,120 +8,90 @@ block0(v0: i64, v1: i64, v2: i64, v3: i64):
|
||||
return v0
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movq %rcx, %rax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq %rcx, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f1(i64, i64, i64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: i64, v3: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movq %rdx, %rax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq %rdx, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f2(i64, i64, i64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: i64, v3: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movq %r8, %rax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq %r8, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f3(i64, i64, i64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: i64, v3: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movq %r9, %rax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq %r9, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f4(i64, i64, f64, i64) -> f64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: f64, v3: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movaps %xmm2, %xmm0
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movdqa %xmm2, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f5(i64, i64, f64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: f64, v3: i64):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; Inst 4: movq %r9, %rax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq %r9, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f6(i64, i64, i64, i64, i64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64):
|
||||
@@ -138,59 +108,33 @@ block0(v0: i64, v1: i64, v2: i64, v3: i64, v4: i64, v5: i64):
|
||||
;; TODO(#2704): fix regalloc's register priority ordering!
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 15)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
|
||||
; Inst 4: subq $16, %rsp
|
||||
; Inst 5: movq %rsi, 0(%rsp)
|
||||
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
|
||||
; Inst 7: movq 48(%rbp), %rsi
|
||||
; Inst 8: movq 56(%rbp), %rsi
|
||||
; Inst 9: movq %rsi, %rax
|
||||
; Inst 10: movq 0(%rsp), %rsi
|
||||
; Inst 11: addq $16, %rsp
|
||||
; Inst 12: movq %rbp, %rsp
|
||||
; Inst 13: popq %rbp
|
||||
; Inst 14: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq 48(%rbp), %r11
|
||||
; movq 56(%rbp), %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f7(i128, i64, i128, i128) -> i128 windows_fastcall {
|
||||
block0(v0: i128, v1: i64, v2: i128, v3: i128):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 20)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
|
||||
; Inst 4: subq $16, %rsp
|
||||
; Inst 5: movq %rsi, 0(%rsp)
|
||||
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
|
||||
; Inst 7: movq %rdi, 8(%rsp)
|
||||
; Inst 8: unwind SaveReg { clobber_offset: 8, reg: r17J }
|
||||
; Inst 9: movq 48(%rbp), %rsi
|
||||
; Inst 10: movq 56(%rbp), %rsi
|
||||
; Inst 11: movq 64(%rbp), %rdi
|
||||
; Inst 12: movq %rsi, %rax
|
||||
; Inst 13: movq %rdi, %rdx
|
||||
; Inst 14: movq 0(%rsp), %rsi
|
||||
; Inst 15: movq 8(%rsp), %rdi
|
||||
; Inst 16: addq $16, %rsp
|
||||
; Inst 17: movq %rbp, %rsp
|
||||
; Inst 18: popq %rbp
|
||||
; Inst 19: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; movq 48(%rbp), %r11
|
||||
; movq 56(%rbp), %rax
|
||||
; movq 64(%rbp), %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f8(i64) -> i64 windows_fastcall {
|
||||
sig0 = (i64, i64, f64, f64, i64, i64) -> i64 windows_fastcall
|
||||
@@ -202,37 +146,26 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 25)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
|
||||
; Inst 4: subq $16, %rsp
|
||||
; Inst 5: movq %rsi, 0(%rsp)
|
||||
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r16J }
|
||||
; Inst 7: movq %rcx, %rsi
|
||||
; Inst 8: cvtsi2sd %rsi, %xmm3
|
||||
; Inst 9: subq $48, %rsp
|
||||
; Inst 10: virtual_sp_offset_adjust 48
|
||||
; Inst 11: movq %rsi, %rcx
|
||||
; Inst 12: movq %rsi, %rdx
|
||||
; Inst 13: movaps %xmm3, %xmm2
|
||||
; Inst 14: movq %rsi, 32(%rsp)
|
||||
; Inst 15: movq %rsi, 40(%rsp)
|
||||
; Inst 16: load_ext_name %g+0, %rsi
|
||||
; Inst 17: call *%rsi
|
||||
; Inst 18: addq $48, %rsp
|
||||
; Inst 19: virtual_sp_offset_adjust -48
|
||||
; Inst 20: movq 0(%rsp), %rsi
|
||||
; Inst 21: addq $16, %rsp
|
||||
; Inst 22: movq %rbp, %rsp
|
||||
; Inst 23: popq %rbp
|
||||
; Inst 24: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
||||
; block0:
|
||||
; cvtsi2sd %rcx, %xmm2
|
||||
; subq %rsp, $48, %rsp
|
||||
; virtual_sp_offset_adjust 48
|
||||
; movq %rcx, %rdx
|
||||
; movq %rdx, %r8
|
||||
; movdqa %xmm2, %xmm3
|
||||
; movq %r8, 32(%rsp)
|
||||
; movq %r8, 40(%rsp)
|
||||
; load_ext_name %g+0, %r9
|
||||
; call *%r9
|
||||
; addq %rsp, $48, %rsp
|
||||
; virtual_sp_offset_adjust -48
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f9(i64) -> f64 windows_fastcall {
|
||||
block0(v0: i64):
|
||||
@@ -284,95 +217,91 @@ block0(v0: i64):
|
||||
return v39
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 85)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; Inst 2: movq %rsp, %rbp
|
||||
; Inst 3: unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 160 }
|
||||
; Inst 4: subq $224, %rsp
|
||||
; Inst 5: movdqu %xmm6, 64(%rsp)
|
||||
; Inst 6: unwind SaveReg { clobber_offset: 0, reg: r6V }
|
||||
; Inst 7: movdqu %xmm7, 80(%rsp)
|
||||
; Inst 8: unwind SaveReg { clobber_offset: 16, reg: r7V }
|
||||
; Inst 9: movdqu %xmm8, 96(%rsp)
|
||||
; Inst 10: unwind SaveReg { clobber_offset: 32, reg: r8V }
|
||||
; Inst 11: movdqu %xmm9, 112(%rsp)
|
||||
; Inst 12: unwind SaveReg { clobber_offset: 48, reg: r9V }
|
||||
; Inst 13: movdqu %xmm10, 128(%rsp)
|
||||
; Inst 14: unwind SaveReg { clobber_offset: 64, reg: r10V }
|
||||
; Inst 15: movdqu %xmm11, 144(%rsp)
|
||||
; Inst 16: unwind SaveReg { clobber_offset: 80, reg: r11V }
|
||||
; Inst 17: movdqu %xmm12, 160(%rsp)
|
||||
; Inst 18: unwind SaveReg { clobber_offset: 96, reg: r12V }
|
||||
; Inst 19: movdqu %xmm13, 176(%rsp)
|
||||
; Inst 20: unwind SaveReg { clobber_offset: 112, reg: r13V }
|
||||
; Inst 21: movdqu %xmm14, 192(%rsp)
|
||||
; Inst 22: unwind SaveReg { clobber_offset: 128, reg: r14V }
|
||||
; Inst 23: movdqu %xmm15, 208(%rsp)
|
||||
; Inst 24: unwind SaveReg { clobber_offset: 144, reg: r15V }
|
||||
; Inst 25: movsd 0(%rcx), %xmm0
|
||||
; Inst 26: movdqu %xmm0, rsp(48 + virtual offset)
|
||||
; Inst 27: movsd 8(%rcx), %xmm1
|
||||
; Inst 28: movsd 16(%rcx), %xmm0
|
||||
; Inst 29: movdqu %xmm0, rsp(32 + virtual offset)
|
||||
; Inst 30: movsd 24(%rcx), %xmm3
|
||||
; Inst 31: movsd 32(%rcx), %xmm4
|
||||
; Inst 32: movsd 40(%rcx), %xmm5
|
||||
; Inst 33: movsd 48(%rcx), %xmm6
|
||||
; Inst 34: movsd 56(%rcx), %xmm7
|
||||
; Inst 35: movsd 64(%rcx), %xmm8
|
||||
; Inst 36: movsd 72(%rcx), %xmm9
|
||||
; Inst 37: movsd 80(%rcx), %xmm10
|
||||
; Inst 38: movsd 88(%rcx), %xmm11
|
||||
; Inst 39: movsd 96(%rcx), %xmm12
|
||||
; Inst 40: movsd 104(%rcx), %xmm13
|
||||
; Inst 41: movsd 112(%rcx), %xmm14
|
||||
; Inst 42: movsd 120(%rcx), %xmm15
|
||||
; Inst 43: movsd 128(%rcx), %xmm2
|
||||
; Inst 44: movdqu %xmm2, rsp(0 + virtual offset)
|
||||
; Inst 45: movsd 136(%rcx), %xmm2
|
||||
; Inst 46: movsd 144(%rcx), %xmm0
|
||||
; Inst 47: movdqu %xmm0, rsp(16 + virtual offset)
|
||||
; Inst 48: movdqu rsp(48 + virtual offset), %xmm0
|
||||
; Inst 49: addsd %xmm1, %xmm0
|
||||
; Inst 50: movdqu rsp(32 + virtual offset), %xmm1
|
||||
; Inst 51: addsd %xmm3, %xmm1
|
||||
; Inst 52: addsd %xmm5, %xmm4
|
||||
; Inst 53: addsd %xmm7, %xmm6
|
||||
; Inst 54: addsd %xmm9, %xmm8
|
||||
; Inst 55: addsd %xmm11, %xmm10
|
||||
; Inst 56: addsd %xmm13, %xmm12
|
||||
; Inst 57: addsd %xmm15, %xmm14
|
||||
; Inst 58: movdqu rsp(0 + virtual offset), %xmm3
|
||||
; Inst 59: addsd %xmm2, %xmm3
|
||||
; Inst 60: movdqu rsp(16 + virtual offset), %xmm2
|
||||
; Inst 61: addsd 152(%rcx), %xmm2
|
||||
; Inst 62: addsd %xmm1, %xmm0
|
||||
; Inst 63: addsd %xmm6, %xmm4
|
||||
; Inst 64: addsd %xmm10, %xmm8
|
||||
; Inst 65: addsd %xmm14, %xmm12
|
||||
; Inst 66: addsd %xmm2, %xmm3
|
||||
; Inst 67: addsd %xmm4, %xmm0
|
||||
; Inst 68: addsd %xmm12, %xmm8
|
||||
; Inst 69: addsd %xmm8, %xmm0
|
||||
; Inst 70: addsd %xmm3, %xmm0
|
||||
; Inst 71: movdqu 64(%rsp), %xmm6
|
||||
; Inst 72: movdqu 80(%rsp), %xmm7
|
||||
; Inst 73: movdqu 96(%rsp), %xmm8
|
||||
; Inst 74: movdqu 112(%rsp), %xmm9
|
||||
; Inst 75: movdqu 128(%rsp), %xmm10
|
||||
; Inst 76: movdqu 144(%rsp), %xmm11
|
||||
; Inst 77: movdqu 160(%rsp), %xmm12
|
||||
; Inst 78: movdqu 176(%rsp), %xmm13
|
||||
; Inst 79: movdqu 192(%rsp), %xmm14
|
||||
; Inst 80: movdqu 208(%rsp), %xmm15
|
||||
; Inst 81: addq $224, %rsp
|
||||
; Inst 82: movq %rbp, %rsp
|
||||
; Inst 83: popq %rbp
|
||||
; Inst 84: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
||||
; movq %rsp, %rbp
|
||||
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 144 }
|
||||
; subq %rsp, $240, %rsp
|
||||
; movdqu %xmm6, 96(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 0, reg: p6f }
|
||||
; movdqu %xmm7, 112(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 16, reg: p7f }
|
||||
; movdqu %xmm8, 128(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 32, reg: p8f }
|
||||
; movdqu %xmm9, 144(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 48, reg: p9f }
|
||||
; movdqu %xmm10, 160(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 64, reg: p10f }
|
||||
; movdqu %xmm11, 176(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 80, reg: p11f }
|
||||
; movdqu %xmm12, 192(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 96, reg: p12f }
|
||||
; movdqu %xmm13, 208(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 112, reg: p13f }
|
||||
; movdqu %xmm14, 224(%rsp)
|
||||
; unwind SaveReg { clobber_offset: 128, reg: p14f }
|
||||
; block0:
|
||||
; movsd 0(%rcx), %xmm0
|
||||
; movsd 8(%rcx), %xmm12
|
||||
; movdqu %xmm12, rsp(80 + virtual offset)
|
||||
; movsd 16(%rcx), %xmm6
|
||||
; movdqu %xmm6, rsp(0 + virtual offset)
|
||||
; movsd 24(%rcx), %xmm2
|
||||
; movdqu %xmm2, rsp(64 + virtual offset)
|
||||
; movsd 32(%rcx), %xmm14
|
||||
; movsd 40(%rcx), %xmm3
|
||||
; movdqu %xmm3, rsp(48 + virtual offset)
|
||||
; movsd 48(%rcx), %xmm9
|
||||
; movsd 56(%rcx), %xmm7
|
||||
; movdqu %xmm7, rsp(32 + virtual offset)
|
||||
; movsd 64(%rcx), %xmm13
|
||||
; movsd 72(%rcx), %xmm10
|
||||
; movdqu %xmm10, rsp(16 + virtual offset)
|
||||
; movsd 80(%rcx), %xmm11
|
||||
; movsd 88(%rcx), %xmm10
|
||||
; movsd 96(%rcx), %xmm5
|
||||
; movsd 104(%rcx), %xmm12
|
||||
; movsd 112(%rcx), %xmm1
|
||||
; movsd 120(%rcx), %xmm2
|
||||
; movsd 128(%rcx), %xmm8
|
||||
; movsd 136(%rcx), %xmm3
|
||||
; movsd 144(%rcx), %xmm4
|
||||
; movdqu rsp(80 + virtual offset), %xmm6
|
||||
; addsd %xmm0, %xmm0, %xmm6
|
||||
; movdqu rsp(0 + virtual offset), %xmm6
|
||||
; movdqu rsp(64 + virtual offset), %xmm7
|
||||
; addsd %xmm6, %xmm6, %xmm7
|
||||
; movdqu rsp(48 + virtual offset), %xmm7
|
||||
; addsd %xmm14, %xmm14, %xmm7
|
||||
; movdqu rsp(32 + virtual offset), %xmm7
|
||||
; addsd %xmm9, %xmm9, %xmm7
|
||||
; movdqu rsp(16 + virtual offset), %xmm7
|
||||
; addsd %xmm13, %xmm13, %xmm7
|
||||
; addsd %xmm11, %xmm11, %xmm10
|
||||
; addsd %xmm5, %xmm5, %xmm12
|
||||
; addsd %xmm1, %xmm1, %xmm2
|
||||
; addsd %xmm8, %xmm8, %xmm3
|
||||
; addsd %xmm4, 152(%xmm4), %rcx
|
||||
; addsd %xmm0, %xmm0, %xmm6
|
||||
; addsd %xmm14, %xmm14, %xmm9
|
||||
; addsd %xmm13, %xmm13, %xmm11
|
||||
; addsd %xmm5, %xmm5, %xmm1
|
||||
; addsd %xmm8, %xmm8, %xmm4
|
||||
; addsd %xmm0, %xmm0, %xmm14
|
||||
; addsd %xmm13, %xmm13, %xmm5
|
||||
; addsd %xmm0, %xmm0, %xmm13
|
||||
; addsd %xmm0, %xmm0, %xmm8
|
||||
; movdqu 96(%rsp), %xmm6
|
||||
; movdqu 112(%rsp), %xmm7
|
||||
; movdqu 128(%rsp), %xmm8
|
||||
; movdqu 144(%rsp), %xmm9
|
||||
; movdqu 160(%rsp), %xmm10
|
||||
; movdqu 176(%rsp), %xmm11
|
||||
; movdqu 192(%rsp), %xmm12
|
||||
; movdqu 208(%rsp), %xmm13
|
||||
; movdqu 224(%rsp), %xmm14
|
||||
; addq %rsp, $240, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,21 +7,17 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movabsq $9223372036854775807, %rsi
|
||||
; Inst 3: movq %rsi, %xmm1
|
||||
; Inst 4: andpd %xmm0, %xmm1
|
||||
; Inst 5: movaps %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm5
|
||||
; movabsq $9223372036854775807, %rdx
|
||||
; movq %rdx, %xmm0
|
||||
; movdqa %xmm5, %xmm7
|
||||
; andpd %xmm0, %xmm0, %xmm7
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f(i64) -> f64 {
|
||||
block0(v0: i64):
|
||||
@@ -30,20 +26,14 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 10)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movsd 0(%rdi), %xmm0
|
||||
; Inst 3: movabsq $9223372036854775807, %rsi
|
||||
; Inst 4: movq %rsi, %xmm1
|
||||
; Inst 5: andpd %xmm0, %xmm1
|
||||
; Inst 6: movaps %xmm1, %xmm0
|
||||
; Inst 7: movq %rbp, %rsp
|
||||
; Inst 8: popq %rbp
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movsd 0(%rdi), %xmm5
|
||||
; movabsq $9223372036854775807, %r8
|
||||
; movq %r8, %xmm0
|
||||
; andpd %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -13,36 +13,24 @@ block0(v0: i32, v1: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl %edi, %ecx
|
||||
; Inst 3: movq 8(%rsi), %rdi
|
||||
; Inst 4: movq %rcx, %rax
|
||||
; Inst 5: addq $32768, %rax
|
||||
; Inst 6: jnb ; ud2 heap_oob ;
|
||||
; Inst 7: cmpq %rdi, %rax
|
||||
; Inst 8: jbe label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 9 .. 17)
|
||||
; Inst 9: addq 0(%rsi), %rcx
|
||||
; Inst 10: xorq %rsi, %rsi
|
||||
; Inst 11: cmpq %rdi, %rax
|
||||
; Inst 12: cmovnbeq %rsi, %rcx
|
||||
; Inst 13: movq %rcx, %rax
|
||||
; Inst 14: movq %rbp, %rsp
|
||||
; Inst 15: popq %rbp
|
||||
; Inst 16: ret
|
||||
; Block 2:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 17 .. 18)
|
||||
; Inst 17: ud2 heap_oob
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movl %edi, %eax
|
||||
; movq 8(%rsi), %rcx
|
||||
; movq %rax, %rdx
|
||||
; addq %rdx, $32768, %rdx
|
||||
; jnb ; ud2 heap_oob ;
|
||||
; cmpq %rcx, %rdx
|
||||
; jbe label1; j label2
|
||||
; block1:
|
||||
; addq %rax, 0(%rsi), %rax
|
||||
; xorq %r8, %r8, %r8
|
||||
; cmpq %rcx, %rdx
|
||||
; cmovnbeq %r8, %rax, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; ud2 heap_oob
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -16,30 +16,19 @@ block2:
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (successor: Block 1)
|
||||
; (successor: Block 2)
|
||||
; (instruction range: 0 .. 4)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: cmpq %rsp, %rdi
|
||||
; Inst 3: jnbe label1; j label2
|
||||
; Block 1:
|
||||
; (original IR block: block1)
|
||||
; (instruction range: 4 .. 8)
|
||||
; Inst 4: xorl %eax, %eax
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; Block 2:
|
||||
; (original IR block: block2)
|
||||
; (instruction range: 8 .. 12)
|
||||
; Inst 8: movl $1, %eax
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; cmpq %rsp, %rdi
|
||||
; jnbe label1; j label2
|
||||
; block1:
|
||||
; xorl %eax, %eax, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
; block2:
|
||||
; movl $1, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ function %add_from_mem_u32_1(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
v2 = load.i32 v0
|
||||
v3 = iadd.i32 v2, v1
|
||||
; check: addl 0(%rdi), %esi
|
||||
; check: addl %esi, 0(%rdi), %esi
|
||||
return v3
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ function %add_from_mem_u32_2(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
v2 = load.i32 v0
|
||||
v3 = iadd.i32 v1, v2
|
||||
; check: addl 0(%rdi), %esi
|
||||
; check: addl %esi, 0(%rdi), %esi
|
||||
return v3
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ function %add_from_mem_u64_1(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2 = load.i64 v0
|
||||
v3 = iadd.i64 v2, v1
|
||||
; check: addq 0(%rdi), %rsi
|
||||
; check: addq %rsi, 0(%rdi), %rsi
|
||||
return v3
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ function %add_from_mem_u64_2(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
v2 = load.i64 v0
|
||||
v3 = iadd.i64 v1, v2
|
||||
; check: addq 0(%rdi), %rsi
|
||||
; check: addq %rsi, 0(%rdi), %rsi
|
||||
return v3
|
||||
}
|
||||
|
||||
@@ -39,8 +39,8 @@ function %add_from_mem_not_narrow(i64, i8) -> i8 {
|
||||
block0(v0: i64, v1: i8):
|
||||
v2 = load.i8 v0
|
||||
v3 = iadd.i8 v2, v1
|
||||
; check: movzbq 0(%rdi), %rdi
|
||||
; nextln: addl %esi, %edi
|
||||
; check: movzbq 0(%rdi), %rax
|
||||
; nextln: addl %eax, %esi, %eax
|
||||
return v3
|
||||
}
|
||||
|
||||
@@ -51,12 +51,11 @@ block0(v0: i64, v1: i64):
|
||||
store.i64 v3, v1
|
||||
v4 = load.i64 v3
|
||||
return v4
|
||||
; check: movq 0(%rdi), %rax
|
||||
; nextln: movq %rax, %rcx
|
||||
; nextln: addq %rdi, %rcx
|
||||
; nextln: movq %rcx, 0(%rsi)
|
||||
; nextln: movq 0(%rax,%rdi,1), %rsi
|
||||
; nextln: movq %rsi, %rax
|
||||
; check: movq 0(%rdi), %r11
|
||||
; nextln: movq %r11, %rax
|
||||
; nextln: addq %rax, %rdi, %rax
|
||||
; nextln: movq %rax, 0(%rsi)
|
||||
; nextln: movq 0(%r11,%rdi,1), %rax
|
||||
}
|
||||
|
||||
function %merge_scalar_to_vector(i64) -> i32x4 {
|
||||
|
||||
@@ -13,15 +13,10 @@ block0(v0: i32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rbp, %rsp
|
||||
; Inst 3: popq %rbp
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,19 +7,13 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: popcntq %rdi, %rsi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; popcntq %rdi, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %popcnt(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -27,17 +21,11 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: popcntl %edi, %esi
|
||||
; Inst 3: movq %rsi, %rax
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; popcntl %edi, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -7,37 +7,31 @@ block0(v0: i64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 25)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdi, %rax
|
||||
; Inst 3: shrq $1, %rax
|
||||
; Inst 4: movabsq $8608480567731124087, %rsi
|
||||
; Inst 5: andq %rsi, %rax
|
||||
; Inst 6: subq %rax, %rdi
|
||||
; Inst 7: shrq $1, %rax
|
||||
; Inst 8: andq %rsi, %rax
|
||||
; Inst 9: subq %rax, %rdi
|
||||
; Inst 10: shrq $1, %rax
|
||||
; Inst 11: andq %rsi, %rax
|
||||
; Inst 12: subq %rax, %rdi
|
||||
; Inst 13: movq %rdi, %rsi
|
||||
; Inst 14: shrq $4, %rsi
|
||||
; Inst 15: addq %rdi, %rsi
|
||||
; Inst 16: movabsq $1085102592571150095, %rdi
|
||||
; Inst 17: andq %rdi, %rsi
|
||||
; Inst 18: movabsq $72340172838076673, %rdi
|
||||
; Inst 19: imulq %rdi, %rsi
|
||||
; Inst 20: shrq $56, %rsi
|
||||
; Inst 21: movq %rsi, %rax
|
||||
; Inst 22: movq %rbp, %rsp
|
||||
; Inst 23: popq %rbp
|
||||
; Inst 24: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rcx
|
||||
; shrq $1, %rcx, %rcx
|
||||
; movabsq $8608480567731124087, %r8
|
||||
; andq %rcx, %r8, %rcx
|
||||
; subq %rdi, %rcx, %rdi
|
||||
; shrq $1, %rcx, %rcx
|
||||
; andq %rcx, %r8, %rcx
|
||||
; subq %rdi, %rcx, %rdi
|
||||
; shrq $1, %rcx, %rcx
|
||||
; andq %rcx, %r8, %rcx
|
||||
; subq %rdi, %rcx, %rdi
|
||||
; movq %rdi, %rax
|
||||
; shrq $4, %rax, %rax
|
||||
; addq %rax, %rdi, %rax
|
||||
; movabsq $1085102592571150095, %rcx
|
||||
; andq %rax, %rcx, %rax
|
||||
; movabsq $72340172838076673, %r11
|
||||
; imulq %rax, %r11, %rax
|
||||
; shrq $56, %rax, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %popcnt64load(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
@@ -46,38 +40,32 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 26)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq 0(%rdi), %rdi
|
||||
; Inst 3: movq %rdi, %rax
|
||||
; Inst 4: shrq $1, %rax
|
||||
; Inst 5: movabsq $8608480567731124087, %rsi
|
||||
; Inst 6: andq %rsi, %rax
|
||||
; Inst 7: subq %rax, %rdi
|
||||
; Inst 8: shrq $1, %rax
|
||||
; Inst 9: andq %rsi, %rax
|
||||
; Inst 10: subq %rax, %rdi
|
||||
; Inst 11: shrq $1, %rax
|
||||
; Inst 12: andq %rsi, %rax
|
||||
; Inst 13: subq %rax, %rdi
|
||||
; Inst 14: movq %rdi, %rsi
|
||||
; Inst 15: shrq $4, %rsi
|
||||
; Inst 16: addq %rdi, %rsi
|
||||
; Inst 17: movabsq $1085102592571150095, %rdi
|
||||
; Inst 18: andq %rdi, %rsi
|
||||
; Inst 19: movabsq $72340172838076673, %rdi
|
||||
; Inst 20: imulq %rdi, %rsi
|
||||
; Inst 21: shrq $56, %rsi
|
||||
; Inst 22: movq %rsi, %rax
|
||||
; Inst 23: movq %rbp, %rsp
|
||||
; Inst 24: popq %rbp
|
||||
; Inst 25: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq 0(%rdi), %rdx
|
||||
; movq %rdx, %r8
|
||||
; shrq $1, %r8, %r8
|
||||
; movabsq $8608480567731124087, %r9
|
||||
; andq %r8, %r9, %r8
|
||||
; subq %rdx, %r8, %rdx
|
||||
; shrq $1, %r8, %r8
|
||||
; andq %r8, %r9, %r8
|
||||
; subq %rdx, %r8, %rdx
|
||||
; shrq $1, %r8, %r8
|
||||
; andq %r8, %r9, %r8
|
||||
; subq %rdx, %r8, %rdx
|
||||
; movq %rdx, %rax
|
||||
; shrq $4, %rax, %rax
|
||||
; addq %rax, %rdx, %rax
|
||||
; movabsq $1085102592571150095, %rdx
|
||||
; andq %rax, %rdx, %rax
|
||||
; movabsq $72340172838076673, %rsi
|
||||
; imulq %rax, %rsi, %rax
|
||||
; shrq $56, %rax, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %popcnt32(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
@@ -85,35 +73,29 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 23)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rdi, %rax
|
||||
; Inst 3: shrl $1, %eax
|
||||
; Inst 4: movl $2004318071, %esi
|
||||
; Inst 5: andl %esi, %eax
|
||||
; Inst 6: subl %eax, %edi
|
||||
; Inst 7: shrl $1, %eax
|
||||
; Inst 8: andl %esi, %eax
|
||||
; Inst 9: subl %eax, %edi
|
||||
; Inst 10: shrl $1, %eax
|
||||
; Inst 11: andl %esi, %eax
|
||||
; Inst 12: subl %eax, %edi
|
||||
; Inst 13: movq %rdi, %rsi
|
||||
; Inst 14: shrl $4, %esi
|
||||
; Inst 15: addl %edi, %esi
|
||||
; Inst 16: andl $252645135, %esi
|
||||
; Inst 17: imull $16843009, %esi
|
||||
; Inst 18: shrl $24, %esi
|
||||
; Inst 19: movq %rsi, %rax
|
||||
; Inst 20: movq %rbp, %rsp
|
||||
; Inst 21: popq %rbp
|
||||
; Inst 22: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rcx
|
||||
; shrl $1, %ecx, %ecx
|
||||
; movl $2004318071, %r8d
|
||||
; andl %ecx, %r8d, %ecx
|
||||
; subl %edi, %ecx, %edi
|
||||
; shrl $1, %ecx, %ecx
|
||||
; andl %ecx, %r8d, %ecx
|
||||
; subl %edi, %ecx, %edi
|
||||
; shrl $1, %ecx, %ecx
|
||||
; andl %ecx, %r8d, %ecx
|
||||
; subl %edi, %ecx, %edi
|
||||
; movq %rdi, %rax
|
||||
; shrl $4, %eax, %eax
|
||||
; addl %eax, %edi, %eax
|
||||
; andl %eax, $252645135, %eax
|
||||
; imull %eax, $16843009, %eax
|
||||
; shrl $24, %eax, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %popcnt32load(i64) -> i32 {
|
||||
block0(v0: i64):
|
||||
@@ -122,34 +104,28 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 24)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl 0(%rdi), %edi
|
||||
; Inst 3: movq %rdi, %rax
|
||||
; Inst 4: shrl $1, %eax
|
||||
; Inst 5: movl $2004318071, %esi
|
||||
; Inst 6: andl %esi, %eax
|
||||
; Inst 7: subl %eax, %edi
|
||||
; Inst 8: shrl $1, %eax
|
||||
; Inst 9: andl %esi, %eax
|
||||
; Inst 10: subl %eax, %edi
|
||||
; Inst 11: shrl $1, %eax
|
||||
; Inst 12: andl %esi, %eax
|
||||
; Inst 13: subl %eax, %edi
|
||||
; Inst 14: movq %rdi, %rsi
|
||||
; Inst 15: shrl $4, %esi
|
||||
; Inst 16: addl %edi, %esi
|
||||
; Inst 17: andl $252645135, %esi
|
||||
; Inst 18: imull $16843009, %esi
|
||||
; Inst 19: shrl $24, %esi
|
||||
; Inst 20: movq %rsi, %rax
|
||||
; Inst 21: movq %rbp, %rsp
|
||||
; Inst 22: popq %rbp
|
||||
; Inst 23: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movl 0(%rdi), %edx
|
||||
; movq %rdx, %r8
|
||||
; shrl $1, %r8d, %r8d
|
||||
; movl $2004318071, %r9d
|
||||
; andl %r8d, %r9d, %r8d
|
||||
; subl %edx, %r8d, %edx
|
||||
; shrl $1, %r8d, %r8d
|
||||
; andl %r8d, %r9d, %r8d
|
||||
; subl %edx, %r8d, %edx
|
||||
; shrl $1, %r8d, %r8d
|
||||
; andl %r8d, %r9d, %r8d
|
||||
; subl %edx, %r8d, %edx
|
||||
; movq %rdx, %rax
|
||||
; shrl $4, %eax, %eax
|
||||
; addl %eax, %edx, %eax
|
||||
; andl %eax, $252645135, %eax
|
||||
; imull %eax, $16843009, %eax
|
||||
; shrl $24, %eax, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,21 +10,15 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl $100000, %eax
|
||||
; Inst 3: call LibCall(Probestack)
|
||||
; Inst 4: subq $100000, %rsp
|
||||
; Inst 5: lea rsp(0 + virtual offset), %rsi
|
||||
; Inst 6: movq %rsi, %rax
|
||||
; Inst 7: addq $100000, %rsp
|
||||
; Inst 8: movq %rbp, %rsp
|
||||
; Inst 9: popq %rbp
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; movl $100000, %eax
|
||||
; call LibCall(Probestack)
|
||||
; subq %rsp, $100000, %rsp
|
||||
; block0:
|
||||
; lea rsp(0 + virtual offset), %rax
|
||||
; addq %rsp, $100000, %rsp
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -10,25 +10,19 @@ block0(v0: i32, v1: i128, v2: i128):
|
||||
return v5
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl $42, %eax
|
||||
; Inst 3: cmpl %eax, %edi
|
||||
; Inst 4: cmovzq %rsi, %rcx
|
||||
; Inst 5: cmovzq %rdx, %r8
|
||||
; Inst 6: movq %rcx, %rax
|
||||
; Inst 7: movq %r8, %rdx
|
||||
; Inst 8: movq %rbp, %rsp
|
||||
; Inst 9: popq %rbp
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movl $42, %r9d
|
||||
; cmpl %r9d, %edi
|
||||
; cmovzq %rsi, %rcx, %rcx
|
||||
; cmovzq %rdx, %r8, %r8
|
||||
; movq %rcx, %rax
|
||||
; movq %r8, %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
;; Test for issue: https://github.com/bytecodealliance/wasmtime/issues/3963.
|
||||
function %f1(f32, i128, i128) -> i128 {
|
||||
block0(v0: f32, v1: i128, v2: i128):
|
||||
v3 = fcmp.f32 eq v0, v0
|
||||
@@ -36,22 +30,17 @@ block0(v0: f32, v1: i128, v2: i128):
|
||||
return v4
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 12)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: ucomiss %xmm0, %xmm0
|
||||
; Inst 3: cmovnzq %rdx, %rdi
|
||||
; Inst 4: cmovpq %rdx, %rdi
|
||||
; Inst 5: cmovnzq %rcx, %rsi
|
||||
; Inst 6: cmovpq %rcx, %rsi
|
||||
; Inst 7: movq %rdi, %rax
|
||||
; Inst 8: movq %rsi, %rdx
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; ucomiss %xmm0, %xmm0
|
||||
; cmovnzq %rdx, %rdi, %rdi
|
||||
; cmovpq %rdx, %rdi, %rdi
|
||||
; cmovnzq %rcx, %rsi, %rsi
|
||||
; cmovpq %rcx, %rsi, %rsi
|
||||
; movq %rdi, %rax
|
||||
; movq %rsi, %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,18 +8,13 @@ block0(v0: f32x4, v1: f32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: andps %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; andps %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %band_f64x2(f64x2, f64x2) -> f64x2 {
|
||||
block0(v0: f64x2, v1: f64x2):
|
||||
@@ -27,18 +22,13 @@ block0(v0: f64x2, v1: f64x2):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: andpd %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; andpd %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %band_i32x4(i32x4, i32x4) -> i32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -46,18 +36,13 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pand %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pand %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bor_f32x4(f32x4, f32x4) -> f32x4 {
|
||||
block0(v0: f32x4, v1: f32x4):
|
||||
@@ -65,18 +50,13 @@ block0(v0: f32x4, v1: f32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: orps %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; orps %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bor_f64x2(f64x2, f64x2) -> f64x2 {
|
||||
block0(v0: f64x2, v1: f64x2):
|
||||
@@ -84,18 +64,13 @@ block0(v0: f64x2, v1: f64x2):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: orpd %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; orpd %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bor_i32x4(i32x4, i32x4) -> i32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -103,18 +78,13 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: por %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; por %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bxor_f32x4(f32x4, f32x4) -> f32x4 {
|
||||
block0(v0: f32x4, v1: f32x4):
|
||||
@@ -122,18 +92,13 @@ block0(v0: f32x4, v1: f32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: xorps %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; xorps %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bxor_f64x2(f64x2, f64x2) -> f64x2 {
|
||||
block0(v0: f64x2, v1: f64x2):
|
||||
@@ -141,18 +106,13 @@ block0(v0: f64x2, v1: f64x2):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: xorpd %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; xorpd %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bxor_i32x4(i32x4, i32x4) -> i32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -160,18 +120,13 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pxor %xmm1, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pxor %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %bitselect_i16x8() -> i16x8 {
|
||||
block0:
|
||||
@@ -182,23 +137,18 @@ block0:
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(0), %xmm0
|
||||
; Inst 3: load_const VCodeConstant(0), %xmm1
|
||||
; Inst 4: load_const VCodeConstant(0), %xmm2
|
||||
; Inst 5: pand %xmm0, %xmm1
|
||||
; Inst 6: pandn %xmm2, %xmm0
|
||||
; Inst 7: por %xmm1, %xmm0
|
||||
; Inst 8: movq %rbp, %rsp
|
||||
; Inst 9: popq %rbp
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(0), %xmm0
|
||||
; load_const VCodeConstant(0), %xmm5
|
||||
; load_const VCodeConstant(0), %xmm4
|
||||
; pand %xmm5, %xmm5, %xmm0
|
||||
; pandn %xmm0, %xmm0, %xmm4
|
||||
; por %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %vselect_i16x8(b16x8, i16x8, i16x8) -> i16x8 {
|
||||
block0(v0: b16x8, v1: i16x8, v2: i16x8):
|
||||
@@ -206,19 +156,14 @@ block0(v0: b16x8, v1: i16x8, v2: i16x8):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pblendvb %xmm1, %xmm2
|
||||
; Inst 3: movdqa %xmm2, %xmm0
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pblendvb %xmm2, %xmm2, %xmm1
|
||||
; movdqa %xmm2, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %vselect_f32x4(b32x4, f32x4, f32x4) -> f32x4 {
|
||||
block0(v0: b32x4, v1: f32x4, v2: f32x4):
|
||||
@@ -226,19 +171,14 @@ block0(v0: b32x4, v1: f32x4, v2: f32x4):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: blendvps %xmm1, %xmm2
|
||||
; Inst 3: movdqa %xmm2, %xmm0
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; blendvps %xmm2, %xmm2, %xmm1
|
||||
; movdqa %xmm2, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %vselect_f64x2(b64x2, f64x2, f64x2) -> f64x2 {
|
||||
block0(v0: b64x2, v1: f64x2, v2: f64x2):
|
||||
@@ -246,19 +186,14 @@ block0(v0: b64x2, v1: f64x2, v2: f64x2):
|
||||
return v3
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 7)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: blendvpd %xmm1, %xmm2
|
||||
; Inst 3: movdqa %xmm2, %xmm0
|
||||
; Inst 4: movq %rbp, %rsp
|
||||
; Inst 5: popq %rbp
|
||||
; Inst 6: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; blendvpd %xmm2, %xmm2, %xmm1
|
||||
; movdqa %xmm2, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %ishl_i8x16(i32) -> i8x16 {
|
||||
block0(v0: i32):
|
||||
@@ -267,24 +202,19 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 12)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(1), %xmm0
|
||||
; Inst 3: movd %edi, %xmm1
|
||||
; Inst 4: psllw %xmm1, %xmm0
|
||||
; Inst 5: lea const(VCodeConstant(0)), %rsi
|
||||
; Inst 6: shlq $4, %rdi
|
||||
; Inst 7: movdqu 0(%rsi,%rdi,1), %xmm1
|
||||
; Inst 8: pand %xmm1, %xmm0
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(1), %xmm0
|
||||
; movd %edi, %xmm5
|
||||
; psllw %xmm0, %xmm5, %xmm0
|
||||
; lea const(VCodeConstant(0)), %rax
|
||||
; shlq $4, %rdi, %rdi
|
||||
; movdqu 0(%rax,%rdi,1), %xmm13
|
||||
; pand %xmm0, %xmm0, %xmm13
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %ushr_i8x16_imm() -> i8x16 {
|
||||
block0:
|
||||
@@ -294,21 +224,16 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(1), %xmm0
|
||||
; Inst 3: psrlw $1, %xmm0
|
||||
; Inst 4: movdqu const(VCodeConstant(0)), %xmm1
|
||||
; Inst 5: pand %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(1), %xmm0
|
||||
; psrlw %xmm0, $1, %xmm0
|
||||
; movdqu const(VCodeConstant(0)), %xmm5
|
||||
; pand %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %sshr_i8x16(i32) -> i8x16 {
|
||||
block0(v0: i32):
|
||||
@@ -317,27 +242,21 @@ block0(v0: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 15)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(0), %xmm2
|
||||
; Inst 3: movdqa %xmm2, %xmm0
|
||||
; Inst 4: punpcklbw %xmm2, %xmm0
|
||||
; Inst 5: movdqa %xmm2, %xmm1
|
||||
; Inst 6: punpckhbw %xmm2, %xmm1
|
||||
; Inst 7: addl $8, %edi
|
||||
; Inst 8: movd %edi, %xmm2
|
||||
; Inst 9: psraw %xmm2, %xmm0
|
||||
; Inst 10: psraw %xmm2, %xmm1
|
||||
; Inst 11: packsswb %xmm1, %xmm0
|
||||
; Inst 12: movq %rbp, %rsp
|
||||
; Inst 13: popq %rbp
|
||||
; Inst 14: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(0), %xmm9
|
||||
; movdqa %xmm9, %xmm0
|
||||
; punpcklbw %xmm0, %xmm0, %xmm9
|
||||
; punpckhbw %xmm9, %xmm9, %xmm9
|
||||
; addl %edi, $8, %edi
|
||||
; movd %edi, %xmm11
|
||||
; psraw %xmm0, %xmm11, %xmm0
|
||||
; psraw %xmm9, %xmm11, %xmm9
|
||||
; packsswb %xmm0, %xmm0, %xmm9
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %sshr_i8x16_imm(i8x16, i32) -> i8x16 {
|
||||
block0(v0: i8x16, v1: i32):
|
||||
@@ -345,25 +264,23 @@ block0(v0: i8x16, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 13)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movdqa %xmm0, %xmm1
|
||||
; Inst 3: punpcklbw %xmm0, %xmm1
|
||||
; Inst 4: movdqa %xmm0, %xmm2
|
||||
; Inst 5: punpckhbw %xmm0, %xmm2
|
||||
; Inst 6: psraw $11, %xmm1
|
||||
; Inst 7: psraw $11, %xmm2
|
||||
; Inst 8: packsswb %xmm2, %xmm1
|
||||
; Inst 9: movdqa %xmm1, %xmm0
|
||||
; Inst 10: movq %rbp, %rsp
|
||||
; Inst 11: popq %rbp
|
||||
; Inst 12: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm9
|
||||
; punpcklbw %xmm9, %xmm9, %xmm0
|
||||
; punpckhbw %xmm0, %xmm0, %xmm0
|
||||
; movdqa %xmm9, %xmm12
|
||||
; psraw %xmm12, $11, %xmm12
|
||||
; movdqa %xmm12, %xmm9
|
||||
; psraw %xmm0, $11, %xmm0
|
||||
; movdqa %xmm9, %xmm1
|
||||
; packsswb %xmm1, %xmm1, %xmm0
|
||||
; movdqa %xmm1, %xmm9
|
||||
; movdqa %xmm9, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %sshr_i64x2(i64x2, i32) -> i64x2 {
|
||||
block0(v0: i64x2, v1: i32):
|
||||
@@ -371,24 +288,19 @@ block0(v0: i64x2, v1: i32):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 14)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pextrd.w $0, %xmm0, %rsi
|
||||
; Inst 3: pextrd.w $1, %xmm0, %rax
|
||||
; Inst 4: movq %rdi, %rcx
|
||||
; Inst 5: sarq %cl, %rsi
|
||||
; Inst 6: movq %rdi, %rcx
|
||||
; Inst 7: sarq %cl, %rax
|
||||
; Inst 8: uninit %xmm0
|
||||
; Inst 9: pinsrd.w $0, %rsi, %xmm0
|
||||
; Inst 10: pinsrd.w $1, %rax, %xmm0
|
||||
; Inst 11: movq %rbp, %rsp
|
||||
; Inst 12: popq %rbp
|
||||
; Inst 13: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rdi, %rax
|
||||
; pextrd.w $0, %xmm0, %r11
|
||||
; pextrd.w $1, %xmm0, %rdi
|
||||
; movq %rax, %rcx
|
||||
; sarq %cl, %r11, %r11
|
||||
; sarq %cl, %rdi, %rdi
|
||||
; uninit %xmm0
|
||||
; pinsrd.w $0, %xmm0, %r11, %xmm0
|
||||
; pinsrd.w $1, %xmm0, %rdi, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -8,20 +8,15 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pcmpeqd %xmm1, %xmm0
|
||||
; Inst 3: pcmpeqd %xmm1, %xmm1
|
||||
; Inst 4: pxor %xmm1, %xmm0
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pcmpeqd %xmm0, %xmm0, %xmm1
|
||||
; pcmpeqd %xmm7, %xmm7, %xmm7
|
||||
; pxor %xmm0, %xmm0, %xmm7
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %icmp_ugt_i32x4(i32x4, i32x4) -> b32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
@@ -29,21 +24,16 @@ block0(v0: i32x4, v1: i32x4):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: pmaxud %xmm1, %xmm0
|
||||
; Inst 3: pcmpeqd %xmm1, %xmm0
|
||||
; Inst 4: pcmpeqd %xmm1, %xmm1
|
||||
; Inst 5: pxor %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pmaxud %xmm0, %xmm0, %xmm1
|
||||
; pcmpeqd %xmm0, %xmm0, %xmm1
|
||||
; pcmpeqd %xmm9, %xmm9, %xmm9
|
||||
; pxor %xmm0, %xmm0, %xmm9
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %icmp_sge_i16x8(i16x8, i16x8) -> b16x8 {
|
||||
block0(v0: i16x8, v1: i16x8):
|
||||
@@ -51,21 +41,15 @@ block0(v0: i16x8, v1: i16x8):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movdqa %xmm1, %xmm2
|
||||
; Inst 3: movdqa %xmm0, %xmm1
|
||||
; Inst 4: pmaxsw %xmm2, %xmm1
|
||||
; Inst 5: pcmpeqw %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm5
|
||||
; pmaxsw %xmm5, %xmm5, %xmm1
|
||||
; pcmpeqw %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %icmp_uge_i8x16(i8x16, i8x16) -> b8x16 {
|
||||
block0(v0: i8x16, v1: i8x16):
|
||||
@@ -73,19 +57,13 @@ block0(v0: i8x16, v1: i8x16):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movdqa %xmm1, %xmm2
|
||||
; Inst 3: movdqa %xmm0, %xmm1
|
||||
; Inst 4: pmaxub %xmm2, %xmm1
|
||||
; Inst 5: pcmpeqb %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm5
|
||||
; pmaxub %xmm5, %xmm5, %xmm1
|
||||
; pcmpeqb %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
@@ -12,24 +12,19 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 12)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(3), %xmm1
|
||||
; Inst 3: load_const VCodeConstant(2), %xmm0
|
||||
; Inst 4: load_const VCodeConstant(0), %xmm2
|
||||
; Inst 5: pshufb %xmm2, %xmm1
|
||||
; Inst 6: load_const VCodeConstant(1), %xmm2
|
||||
; Inst 7: pshufb %xmm2, %xmm0
|
||||
; Inst 8: orps %xmm1, %xmm0
|
||||
; Inst 9: movq %rbp, %rsp
|
||||
; Inst 10: popq %rbp
|
||||
; Inst 11: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(3), %xmm1
|
||||
; load_const VCodeConstant(2), %xmm0
|
||||
; load_const VCodeConstant(0), %xmm9
|
||||
; pshufb %xmm1, %xmm1, %xmm9
|
||||
; load_const VCodeConstant(1), %xmm12
|
||||
; pshufb %xmm0, %xmm0, %xmm12
|
||||
; orps %xmm0, %xmm0, %xmm1
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %shuffle_same_ssa_value() -> i8x16 {
|
||||
block0:
|
||||
@@ -38,20 +33,15 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(1), %xmm0
|
||||
; Inst 3: load_const VCodeConstant(0), %xmm1
|
||||
; Inst 4: pshufb %xmm1, %xmm0
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(1), %xmm0
|
||||
; load_const VCodeConstant(0), %xmm5
|
||||
; pshufb %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %swizzle() -> i8x16 {
|
||||
block0:
|
||||
@@ -61,23 +51,17 @@ block0:
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 11)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: load_const VCodeConstant(1), %xmm1
|
||||
; Inst 3: load_const VCodeConstant(1), %xmm0
|
||||
; Inst 4: load_const VCodeConstant(0), %xmm2
|
||||
; Inst 5: paddusb %xmm2, %xmm0
|
||||
; Inst 6: pshufb %xmm0, %xmm1
|
||||
; Inst 7: movdqa %xmm1, %xmm0
|
||||
; Inst 8: movq %rbp, %rsp
|
||||
; Inst 9: popq %rbp
|
||||
; Inst 10: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; load_const VCodeConstant(1), %xmm0
|
||||
; load_const VCodeConstant(1), %xmm2
|
||||
; load_const VCodeConstant(0), %xmm7
|
||||
; paddusb %xmm2, %xmm2, %xmm7
|
||||
; pshufb %xmm0, %xmm0, %xmm2
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %splat_i8(i8) -> i8x16 {
|
||||
block0(v0: i8):
|
||||
@@ -85,21 +69,16 @@ block0(v0: i8):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: uninit %xmm0
|
||||
; Inst 3: pinsrb $0, %rdi, %xmm0
|
||||
; Inst 4: pxor %xmm1, %xmm1
|
||||
; Inst 5: pshufb %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; uninit %xmm0
|
||||
; pinsrb $0, %xmm0, %rdi, %xmm0
|
||||
; pxor %xmm6, %xmm6, %xmm6
|
||||
; pshufb %xmm0, %xmm0, %xmm6
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %splat_b16() -> b16x8 {
|
||||
block0:
|
||||
@@ -108,22 +87,17 @@ block0:
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 10)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movl $65535, %esi
|
||||
; Inst 3: uninit %xmm0
|
||||
; Inst 4: pinsrw $0, %rsi, %xmm0
|
||||
; Inst 5: pinsrw $1, %rsi, %xmm0
|
||||
; Inst 6: pshufd $0, %xmm0, %xmm0
|
||||
; Inst 7: movq %rbp, %rsp
|
||||
; Inst 8: popq %rbp
|
||||
; Inst 9: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movl $65535, %eax
|
||||
; uninit %xmm0
|
||||
; pinsrw $0, %xmm0, %rax, %xmm0
|
||||
; pinsrw $1, %xmm0, %rax, %xmm0
|
||||
; pshufd $0, %xmm0, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %splat_i32(i32) -> i32x4 {
|
||||
block0(v0: i32):
|
||||
@@ -131,20 +105,15 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 8)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: uninit %xmm0
|
||||
; Inst 3: pinsrd $0, %rdi, %xmm0
|
||||
; Inst 4: pshufd $0, %xmm0, %xmm0
|
||||
; Inst 5: movq %rbp, %rsp
|
||||
; Inst 6: popq %rbp
|
||||
; Inst 7: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; uninit %xmm0
|
||||
; pinsrd $0, %xmm0, %rdi, %xmm0
|
||||
; pshufd $0, %xmm0, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %splat_f64(f64) -> f64x2 {
|
||||
block0(v0: f64):
|
||||
@@ -152,21 +121,17 @@ block0(v0: f64):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 9)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: uninit %xmm1
|
||||
; Inst 3: movsd %xmm0, %xmm1
|
||||
; Inst 4: movlhps %xmm0, %xmm1
|
||||
; Inst 5: movdqa %xmm1, %xmm0
|
||||
; Inst 6: movq %rbp, %rsp
|
||||
; Inst 7: popq %rbp
|
||||
; Inst 8: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movdqa %xmm0, %xmm4
|
||||
; uninit %xmm0
|
||||
; movdqa %xmm4, %xmm5
|
||||
; movsd %xmm0, %xmm0, %xmm5
|
||||
; movlhps %xmm0, %xmm0, %xmm5
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %load32_zero_coalesced(i64) -> i32x4 {
|
||||
block0(v0: i64):
|
||||
@@ -175,18 +140,13 @@ block0(v0: i64):
|
||||
return v2
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movss 0(%rdi), %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movss 0(%rdi), %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %load32_zero_int(i32) -> i32x4 {
|
||||
block0(v0: i32):
|
||||
@@ -194,18 +154,13 @@ block0(v0: i32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 6)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movd %edi, %xmm0
|
||||
; Inst 3: movq %rbp, %rsp
|
||||
; Inst 4: popq %rbp
|
||||
; Inst 5: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movd %edi, %xmm0
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %load32_zero_float(f32) -> f32x4 {
|
||||
block0(v0: f32):
|
||||
@@ -213,15 +168,10 @@ block0(v0: f32):
|
||||
return v1
|
||||
}
|
||||
|
||||
; VCode_ShowWithRRU {{
|
||||
; Entry block: 0
|
||||
; Block 0:
|
||||
; (original IR block: block0)
|
||||
; (instruction range: 0 .. 5)
|
||||
; Inst 0: pushq %rbp
|
||||
; Inst 1: movq %rsp, %rbp
|
||||
; Inst 2: movq %rbp, %rsp
|
||||
; Inst 3: popq %rbp
|
||||
; Inst 4: ret
|
||||
; }}
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user