Files
wasmtime/cranelift/filetests/filetests/isa/x64/i128.clif
Andrew Brown 5fa104205d x64: improve generation of i128 icmp (#3946)
Previously, we used the flags of `AND` for `SETcc`. This change uses
`TEST` instead, which discards the AND result but sets the flags needed
for `SETcc`. This reduces register pressure slightly for this sequence.
2022-03-18 16:36:31 -07:00

1311 lines
34 KiB
Plaintext

test compile precise-output
set enable_llvm_abi_extensions=true
target x86_64
function %f0(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = iadd v0, v1
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: addq %rdx, %rdi
; Inst 3: adcq %rcx, %rsi
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rsi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f1(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = isub v0, v1
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: subq %rdx, %rdi
; Inst 3: sbbq %rcx, %rsi
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rsi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f2(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = band v0, v1
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: andq %rdx, %rdi
; Inst 3: andq %rcx, %rsi
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rsi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f3(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bor v0, v1
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: orq %rdx, %rdi
; Inst 3: orq %rcx, %rsi
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rsi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f4(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = bxor v0, v1
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: xorq %rdx, %rdi
; Inst 3: xorq %rcx, %rsi
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rsi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f5(i128) -> i128 {
block0(v0: i128):
v1 = bnot v0
return v1
}
; 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: movq %rsi, %rax
; Inst 3: movq %rdi, %rsi
; Inst 4: notq %rsi
; Inst 5: movq %rax, %rdi
; Inst 6: notq %rdi
; Inst 7: movq %rsi, %rax
; Inst 8: movq %rdi, %rdx
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; }}
function %f6(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = imul v0, v1
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: movq %rsi, %rax
; Inst 3: movq %rdi, %rsi
; Inst 4: imulq %rcx, %rsi
; Inst 5: imulq %rdx, %rax
; Inst 6: addq %rax, %rsi
; Inst 7: movq %rdi, %rax
; Inst 8: mul %rdx
; Inst 9: addq %rdx, %rsi
; Inst 10: movq %rsi, %rdx
; Inst 11: movq %rbp, %rsp
; Inst 12: popq %rbp
; Inst 13: ret
; }}
function %f7(i64, i64) -> i128 {
block0(v0: i64, v1: i64):
v2 = iconcat.i64 v0, v1
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: movq %rdi, %rax
; Inst 3: movq %rsi, %rdx
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
function %f8(i128) -> i64, i64 {
block0(v0: i128):
v1, v2 = isplit.i128 v0
return v1, 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: movq %rdi, %rax
; Inst 3: movq %rsi, %rdx
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
function %f9(i128, i128) -> b1 {
block0(v0: i128, v1: i128):
v2 = icmp eq v0, v1
v3 = icmp ne v0, v1
v4 = icmp slt v0, v1
v5 = icmp sle v0, v1
v6 = icmp sgt v0, v1
v7 = icmp sge v0, v1
v8 = icmp ult v0, v1
v9 = icmp ule v0, v1
v10 = icmp ugt v0, v1
v11 = icmp uge v0, v1
v12 = band v2, v3
v13 = band v4, v5
v14 = band v6, v7
v15 = band v8, v9
v16 = band v10, v11
v17 = band v12, v13
v18 = band v14, v15
v19 = band v17, v18
v20 = band v19, v16
return v20
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 114)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $64, %rsp
; Inst 3: movq %r12, 16(%rsp)
; Inst 4: movq %r13, 24(%rsp)
; Inst 5: movq %r14, 32(%rsp)
; Inst 6: movq %rbx, 40(%rsp)
; Inst 7: movq %r15, 48(%rsp)
; Inst 8: cmpq %rdx, %rdi
; Inst 9: setz %al
; Inst 10: cmpq %rcx, %rsi
; Inst 11: setz %r8b
; Inst 12: andq %r8, %rax
; Inst 13: testq $1, %rax
; Inst 14: setnz %al
; Inst 15: movq %rax, rsp(0 + virtual offset)
; Inst 16: cmpq %rdx, %rdi
; Inst 17: setnz %al
; Inst 18: cmpq %rcx, %rsi
; Inst 19: setnz %r8b
; Inst 20: orq %r8, %rax
; Inst 21: testq $1, %rax
; Inst 22: setnz %r8b
; Inst 23: cmpq %rcx, %rsi
; Inst 24: setl %r9b
; Inst 25: setz %al
; Inst 26: cmpq %rdx, %rdi
; Inst 27: setb %r10b
; Inst 28: andq %rax, %r10
; Inst 29: orq %r9, %r10
; Inst 30: andq $1, %r10
; Inst 31: setnz %r9b
; Inst 32: cmpq %rcx, %rsi
; Inst 33: setl %r10b
; Inst 34: setz %al
; Inst 35: cmpq %rdx, %rdi
; Inst 36: setbe %r11b
; Inst 37: andq %rax, %r11
; Inst 38: orq %r10, %r11
; Inst 39: andq $1, %r11
; Inst 40: setnz %r10b
; Inst 41: cmpq %rcx, %rsi
; Inst 42: setnle %r11b
; Inst 43: setz %al
; Inst 44: cmpq %rdx, %rdi
; Inst 45: setnbe %r12b
; Inst 46: andq %rax, %r12
; Inst 47: orq %r11, %r12
; Inst 48: andq $1, %r12
; Inst 49: setnz %r11b
; Inst 50: cmpq %rcx, %rsi
; Inst 51: setnle %r12b
; Inst 52: setz %al
; Inst 53: cmpq %rdx, %rdi
; Inst 54: setnb %r13b
; Inst 55: andq %rax, %r13
; Inst 56: orq %r12, %r13
; Inst 57: andq $1, %r13
; Inst 58: setnz %r12b
; Inst 59: cmpq %rcx, %rsi
; Inst 60: setb %r13b
; Inst 61: setz %al
; Inst 62: cmpq %rdx, %rdi
; Inst 63: setb %r14b
; Inst 64: andq %rax, %r14
; Inst 65: orq %r13, %r14
; Inst 66: andq $1, %r14
; Inst 67: setnz %r13b
; Inst 68: cmpq %rcx, %rsi
; Inst 69: setb %r14b
; Inst 70: setz %al
; Inst 71: cmpq %rdx, %rdi
; Inst 72: setbe %bl
; Inst 73: andq %rax, %rbx
; Inst 74: orq %r14, %rbx
; Inst 75: andq $1, %rbx
; Inst 76: setnz %r14b
; Inst 77: cmpq %rcx, %rsi
; Inst 78: setnbe %bl
; Inst 79: setz %r15b
; Inst 80: cmpq %rdx, %rdi
; Inst 81: setnbe %al
; Inst 82: andq %r15, %rax
; Inst 83: orq %rbx, %rax
; Inst 84: andq $1, %rax
; Inst 85: setnz %bl
; Inst 86: cmpq %rcx, %rsi
; Inst 87: setnbe %sil
; Inst 88: setz %cl
; Inst 89: cmpq %rdx, %rdi
; Inst 90: setnb %dil
; Inst 91: andq %rcx, %rdi
; Inst 92: orq %rsi, %rdi
; Inst 93: andq $1, %rdi
; Inst 94: setnz %sil
; Inst 95: movq rsp(0 + virtual offset), %rax
; Inst 96: andl %r8d, %eax
; Inst 97: andl %r10d, %r9d
; Inst 98: andl %r12d, %r11d
; Inst 99: andl %r14d, %r13d
; Inst 100: andl %esi, %ebx
; Inst 101: andl %r9d, %eax
; Inst 102: andl %r13d, %r11d
; Inst 103: andl %r11d, %eax
; Inst 104: andl %ebx, %eax
; Inst 105: movq 16(%rsp), %r12
; Inst 106: movq 24(%rsp), %r13
; Inst 107: movq 32(%rsp), %r14
; Inst 108: movq 40(%rsp), %rbx
; Inst 109: movq 48(%rsp), %r15
; Inst 110: addq $64, %rsp
; Inst 111: movq %rbp, %rsp
; Inst 112: popq %rbp
; Inst 113: ret
; }}
function %f10(i128) -> i32 {
block0(v0: i128):
brz v0, block1
jump block2
block1:
v1 = iconst.i32 1
return v1
block2:
v2 = iconst.i32 2
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpq $0, %rdi
; Inst 3: setz %dil
; Inst 4: cmpq $0, %rsi
; Inst 5: setz %sil
; Inst 6: andb %dil, %sil
; Inst 7: jnz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 8 .. 12)
; Inst 8: movl $1, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 12 .. 16)
; Inst 12: movl $2, %eax
; Inst 13: movq %rbp, %rsp
; Inst 14: popq %rbp
; Inst 15: ret
; }}
function %f11(i128) -> i32 {
block0(v0: i128):
brnz v0, block1
jump block2
block1:
v1 = iconst.i32 1
return v1
block2:
v2 = iconst.i32 2
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (successor: Block 1)
; (successor: Block 2)
; (instruction range: 0 .. 8)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: cmpq $0, %rdi
; Inst 3: setnz %dil
; Inst 4: cmpq $0, %rsi
; Inst 5: setnz %sil
; Inst 6: orb %dil, %sil
; Inst 7: jnz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 8 .. 12)
; Inst 8: movl $1, %eax
; Inst 9: movq %rbp, %rsp
; Inst 10: popq %rbp
; Inst 11: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 12 .. 16)
; Inst 12: movl $2, %eax
; Inst 13: movq %rbp, %rsp
; Inst 14: popq %rbp
; Inst 15: ret
; }}
function %f12(i64) -> i128 {
block0(v0: i64):
v1 = uextend.i128 v0
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: movq %rdi, %rsi
; Inst 3: xorq %rdi, %rdi
; Inst 4: movq %rsi, %rax
; Inst 5: movq %rdi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f13(i64) -> i128 {
block0(v0: i64):
v1 = sextend.i128 v0
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: movq %rdi, %rsi
; Inst 3: movq %rsi, %rdi
; Inst 4: sarq $63, %rdi
; Inst 5: movq %rsi, %rax
; Inst 6: movq %rdi, %rdx
; Inst 7: movq %rbp, %rsp
; Inst 8: popq %rbp
; Inst 9: ret
; }}
function %f14(i8) -> i128 {
block0(v0: i8):
v1 = sextend.i128 v0
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: movsbq %dil, %rsi
; Inst 3: movq %rsi, %rdi
; Inst 4: sarq $63, %rdi
; Inst 5: movq %rsi, %rax
; Inst 6: movq %rdi, %rdx
; Inst 7: movq %rbp, %rsp
; Inst 8: popq %rbp
; Inst 9: ret
; }}
function %f15(i8) -> i128 {
block0(v0: i8):
v1 = uextend.i128 v0
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: movzbq %dil, %rsi
; Inst 3: xorq %rdi, %rdi
; Inst 4: movq %rsi, %rax
; Inst 5: movq %rdi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f16(i128) -> i64 {
block0(v0: i128):
v1 = ireduce.i64 v0
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: movq %rdi, %rax
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
function %f17(i128) -> i8 {
block0(v0: i128):
v1 = ireduce.i8 v0
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: movq %rdi, %rax
; Inst 3: movq %rbp, %rsp
; Inst 4: popq %rbp
; Inst 5: ret
; }}
function %f18(b1) -> i128 {
block0(v0: b1):
v1 = bint.i128 v0
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: movq %rdi, %rsi
; Inst 3: andq $1, %rsi
; Inst 4: xorq %rdi, %rdi
; Inst 5: movq %rsi, %rax
; Inst 6: movq %rdi, %rdx
; Inst 7: movq %rbp, %rsp
; Inst 8: popq %rbp
; Inst 9: ret
; }}
function %f19(i128) -> i128 {
block0(v0: i128):
v1 = popcnt.i128 v0
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 48)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rax
; Inst 3: movq %rax, %rcx
; Inst 4: shrq $1, %rcx
; Inst 5: movabsq $8608480567731124087, %rdi
; Inst 6: andq %rdi, %rcx
; Inst 7: subq %rcx, %rax
; Inst 8: shrq $1, %rcx
; Inst 9: andq %rdi, %rcx
; Inst 10: subq %rcx, %rax
; Inst 11: shrq $1, %rcx
; Inst 12: andq %rdi, %rcx
; Inst 13: subq %rcx, %rax
; Inst 14: movq %rax, %rdi
; Inst 15: shrq $4, %rdi
; Inst 16: addq %rax, %rdi
; Inst 17: movabsq $1085102592571150095, %rax
; Inst 18: andq %rax, %rdi
; Inst 19: movabsq $72340172838076673, %rax
; Inst 20: imulq %rax, %rdi
; Inst 21: shrq $56, %rdi
; Inst 22: movq %rsi, %rcx
; Inst 23: shrq $1, %rcx
; Inst 24: movabsq $8608480567731124087, %rax
; Inst 25: andq %rax, %rcx
; Inst 26: subq %rcx, %rsi
; Inst 27: shrq $1, %rcx
; Inst 28: andq %rax, %rcx
; Inst 29: subq %rcx, %rsi
; Inst 30: shrq $1, %rcx
; Inst 31: andq %rax, %rcx
; Inst 32: subq %rcx, %rsi
; Inst 33: movq %rsi, %rax
; Inst 34: shrq $4, %rax
; Inst 35: addq %rsi, %rax
; Inst 36: movabsq $1085102592571150095, %rsi
; Inst 37: andq %rsi, %rax
; Inst 38: movabsq $72340172838076673, %rsi
; Inst 39: imulq %rsi, %rax
; Inst 40: shrq $56, %rax
; Inst 41: addq %rax, %rdi
; Inst 42: xorq %rsi, %rsi
; Inst 43: movq %rdi, %rax
; Inst 44: movq %rsi, %rdx
; Inst 45: movq %rbp, %rsp
; Inst 46: popq %rbp
; Inst 47: ret
; }}
function %f20(i128) -> i128 {
block0(v0: i128):
v1 = bitrev.i128 v0
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 90)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rsi, %rcx
; Inst 3: movabsq $6148914691236517205, %rsi
; Inst 4: movq %rcx, %rax
; Inst 5: andq %rsi, %rax
; Inst 6: shrq $1, %rcx
; Inst 7: andq %rsi, %rcx
; Inst 8: shlq $1, %rax
; Inst 9: orq %rcx, %rax
; Inst 10: movabsq $3689348814741910323, %rsi
; Inst 11: movq %rax, %rcx
; Inst 12: andq %rsi, %rcx
; Inst 13: shrq $2, %rax
; Inst 14: andq %rsi, %rax
; Inst 15: shlq $2, %rcx
; Inst 16: orq %rax, %rcx
; Inst 17: movabsq $1085102592571150095, %rsi
; Inst 18: movq %rcx, %rax
; Inst 19: andq %rsi, %rax
; Inst 20: shrq $4, %rcx
; Inst 21: andq %rsi, %rcx
; Inst 22: shlq $4, %rax
; Inst 23: orq %rcx, %rax
; Inst 24: movabsq $71777214294589695, %rsi
; Inst 25: movq %rax, %rcx
; Inst 26: andq %rsi, %rcx
; Inst 27: shrq $8, %rax
; Inst 28: andq %rsi, %rax
; Inst 29: shlq $8, %rcx
; Inst 30: orq %rax, %rcx
; Inst 31: movabsq $281470681808895, %rsi
; Inst 32: movq %rcx, %rax
; Inst 33: andq %rsi, %rax
; Inst 34: shrq $16, %rcx
; Inst 35: andq %rsi, %rcx
; Inst 36: shlq $16, %rax
; Inst 37: orq %rcx, %rax
; Inst 38: movabsq $4294967295, %rcx
; Inst 39: movq %rax, %rsi
; Inst 40: andq %rcx, %rsi
; Inst 41: shrq $32, %rax
; Inst 42: shlq $32, %rsi
; Inst 43: orq %rax, %rsi
; Inst 44: movabsq $6148914691236517205, %rax
; Inst 45: movq %rdi, %rcx
; Inst 46: andq %rax, %rcx
; Inst 47: shrq $1, %rdi
; Inst 48: andq %rax, %rdi
; Inst 49: shlq $1, %rcx
; Inst 50: orq %rdi, %rcx
; Inst 51: movabsq $3689348814741910323, %rdi
; Inst 52: movq %rcx, %rax
; Inst 53: andq %rdi, %rax
; Inst 54: shrq $2, %rcx
; Inst 55: andq %rdi, %rcx
; Inst 56: shlq $2, %rax
; Inst 57: orq %rcx, %rax
; Inst 58: movabsq $1085102592571150095, %rdi
; Inst 59: movq %rax, %rcx
; Inst 60: andq %rdi, %rcx
; Inst 61: shrq $4, %rax
; Inst 62: andq %rdi, %rax
; Inst 63: shlq $4, %rcx
; Inst 64: orq %rax, %rcx
; Inst 65: movabsq $71777214294589695, %rdi
; Inst 66: movq %rcx, %rax
; Inst 67: andq %rdi, %rax
; Inst 68: shrq $8, %rcx
; Inst 69: andq %rdi, %rcx
; Inst 70: shlq $8, %rax
; Inst 71: orq %rcx, %rax
; Inst 72: movabsq $281470681808895, %rdi
; Inst 73: movq %rax, %rcx
; Inst 74: andq %rdi, %rcx
; Inst 75: shrq $16, %rax
; Inst 76: andq %rdi, %rax
; Inst 77: shlq $16, %rcx
; Inst 78: orq %rax, %rcx
; Inst 79: movabsq $4294967295, %rax
; Inst 80: movq %rcx, %rdi
; Inst 81: andq %rax, %rdi
; Inst 82: shrq $32, %rcx
; Inst 83: shlq $32, %rdi
; Inst 84: orq %rcx, %rdi
; Inst 85: movq %rsi, %rax
; Inst 86: movq %rdi, %rdx
; Inst 87: movq %rbp, %rsp
; Inst 88: popq %rbp
; Inst 89: ret
; }}
function %f21(i128, i64) {
block0(v0: i128, v1: i64):
store.i128 v0, v1
return
}
; 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 %rdi, 0(%rdx)
; Inst 3: movq %rsi, 8(%rdx)
; Inst 4: movq %rbp, %rsp
; Inst 5: popq %rbp
; Inst 6: ret
; }}
function %f22(i64) -> i128 {
block0(v0: i64):
v1 = load.i128 v0
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: movq 0(%rdi), %rsi
; Inst 3: movq 8(%rdi), %rdi
; Inst 4: movq %rsi, %rax
; Inst 5: movq %rdi, %rdx
; Inst 6: movq %rbp, %rsp
; Inst 7: popq %rbp
; Inst 8: ret
; }}
function %f23(i128, b1) -> i128 {
block0(v0: i128, v1: b1):
v2 = iconst.i128 0
brnz v1, block1(v2)
jump block2(v2)
block1(v3: i128):
v4 = iconst.i128 1
v5 = iadd.i128 v3, v4
return v5
block2(v6: i128):
v7 = iconst.i128 2
v8 = iadd.i128 v6, v7
return v8
}
; 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, %dl
; Inst 3: jnz label1; j label2
; Block 1:
; (original IR block: block1)
; (instruction range: 4 .. 15)
; Inst 4: xorq %rdi, %rdi
; Inst 5: xorq %rsi, %rsi
; Inst 6: movl $1, %ecx
; Inst 7: xorq %rax, %rax
; Inst 8: addq %rcx, %rdi
; Inst 9: adcq %rax, %rsi
; Inst 10: movq %rdi, %rax
; Inst 11: movq %rsi, %rdx
; Inst 12: movq %rbp, %rsp
; Inst 13: popq %rbp
; Inst 14: ret
; Block 2:
; (original IR block: block2)
; (instruction range: 15 .. 26)
; Inst 15: xorq %rdi, %rdi
; Inst 16: xorq %rsi, %rsi
; Inst 17: movl $2, %ecx
; Inst 18: xorq %rax, %rax
; Inst 19: addq %rcx, %rdi
; Inst 20: adcq %rax, %rsi
; Inst 21: movq %rdi, %rax
; Inst 22: movq %rsi, %rdx
; Inst 23: movq %rbp, %rsp
; Inst 24: popq %rbp
; Inst 25: ret
; }}
function %f24(i128, i128, i64, i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i64, v3: i128, v4: i128, v5: i128):
v6 = iadd.i128 v0, v1
v7 = uextend.i128 v2
v8 = iadd.i128 v3, v7
v9 = iadd.i128 v4, v5
v10 = iadd.i128 v6, v8
v11 = iadd.i128 v9, v10
return v11
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 31)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %r13, 8(%rsp)
; Inst 5: movq %r9, %r11
; Inst 6: movq 16(%rbp), %r13
; Inst 7: movq 24(%rbp), %r12
; Inst 8: movq 32(%rbp), %r10
; Inst 9: movq 40(%rbp), %r9
; Inst 10: movq 48(%rbp), %rax
; Inst 11: addq %rdx, %rdi
; Inst 12: movq %rsi, %rdx
; Inst 13: adcq %rcx, %rdx
; Inst 14: xorq %rsi, %rsi
; Inst 15: addq %r8, %r11
; Inst 16: adcq %rsi, %r13
; Inst 17: addq %r9, %r12
; Inst 18: adcq %rax, %r10
; Inst 19: addq %r11, %rdi
; Inst 20: adcq %r13, %rdx
; Inst 21: addq %rdi, %r12
; Inst 22: adcq %rdx, %r10
; Inst 23: movq %r12, %rax
; Inst 24: movq %r10, %rdx
; Inst 25: movq 0(%rsp), %r12
; Inst 26: movq 8(%rsp), %r13
; Inst 27: addq $16, %rsp
; Inst 28: movq %rbp, %rsp
; Inst 29: popq %rbp
; Inst 30: ret
; }}
function %f25(i128) -> i128, i128, i128, i64, i128, i128 {
block0(v0: i128):
v1 = ireduce.i64 v0
return v0, v0, v0, v1, v0, v0
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 37)
; 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 %rbx, 24(%rsp)
; Inst 7: movq %rsi, %rax
; Inst 8: movq %rdx, %rsi
; Inst 9: movq %rdi, %r12
; Inst 10: movq %rdi, %rcx
; Inst 11: movq %rax, %rdx
; Inst 12: movq %rdi, %r8
; Inst 13: movq %rax, %r9
; Inst 14: movq %rdi, %r10
; Inst 15: movq %rax, %r11
; Inst 16: movq %rdi, %r13
; Inst 17: movq %rax, %r14
; Inst 18: movq %rax, %rbx
; Inst 19: movq %rcx, %rax
; Inst 20: movq %r8, 0(%rsi)
; Inst 21: movq %r9, 8(%rsi)
; Inst 22: movq %r10, 16(%rsi)
; Inst 23: movq %r11, 24(%rsi)
; Inst 24: movq %r12, 32(%rsi)
; Inst 25: movq %r13, 40(%rsi)
; Inst 26: movq %r14, 48(%rsi)
; Inst 27: movq %rdi, 56(%rsi)
; Inst 28: movq %rbx, 64(%rsi)
; Inst 29: movq 0(%rsp), %r12
; Inst 30: movq 8(%rsp), %r13
; Inst 31: movq 16(%rsp), %r14
; Inst 32: movq 24(%rsp), %rbx
; Inst 33: addq $32, %rsp
; Inst 34: movq %rbp, %rsp
; Inst 35: popq %rbp
; Inst 36: ret
; }}
function %f26(i128, i128) -> i128, i128 {
fn0 = %g(i128, i128) -> i128, i128
block0(v0: i128, v1: i128):
v2, v3 = call fn0(v0, v1)
return v2, v3
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 21)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: subq $16, %rsp
; Inst 3: movq %r12, 0(%rsp)
; Inst 4: movq %r8, %r12
; Inst 5: subq $16, %rsp
; Inst 6: virtual_sp_offset_adjust 16
; Inst 7: lea 0(%rsp), %r8
; Inst 8: load_ext_name %g+0, %rax
; Inst 9: call *%rax
; Inst 10: movq 0(%rsp), %rsi
; Inst 11: movq 8(%rsp), %rdi
; Inst 12: addq $16, %rsp
; Inst 13: virtual_sp_offset_adjust -16
; Inst 14: movq %rsi, 0(%r12)
; Inst 15: movq %rdi, 8(%r12)
; Inst 16: movq 0(%rsp), %r12
; Inst 17: addq $16, %rsp
; Inst 18: movq %rbp, %rsp
; Inst 19: popq %rbp
; Inst 20: ret
; }}
function %f27(i128) -> i128 {
block0(v0: i128):
v1 = clz.i128 v0
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 21)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movabsq $-1, %rcx
; Inst 3: bsrq %rsi, %rax
; Inst 4: cmovzq %rcx, %rax
; Inst 5: movl $63, %esi
; Inst 6: subq %rax, %rsi
; Inst 7: movabsq $-1, %rax
; Inst 8: bsrq %rdi, %rcx
; Inst 9: cmovzq %rax, %rcx
; Inst 10: movl $63, %edi
; Inst 11: subq %rcx, %rdi
; Inst 12: addq $64, %rdi
; Inst 13: cmpq $64, %rsi
; Inst 14: cmovnzq %rsi, %rdi
; Inst 15: xorq %rsi, %rsi
; Inst 16: movq %rdi, %rax
; Inst 17: movq %rsi, %rdx
; Inst 18: movq %rbp, %rsp
; Inst 19: popq %rbp
; Inst 20: ret
; }}
function %f28(i128) -> i128 {
block0(v0: i128):
v1 = ctz.i128 v0
return v1
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 18)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rsi, %rax
; Inst 3: movl $64, %ecx
; Inst 4: bsfq %rdi, %rsi
; Inst 5: cmovzq %rcx, %rsi
; Inst 6: movl $64, %ecx
; Inst 7: bsfq %rax, %rdi
; Inst 8: cmovzq %rcx, %rdi
; Inst 9: addq $64, %rdi
; Inst 10: cmpq $64, %rsi
; Inst 11: cmovzq %rdi, %rsi
; Inst 12: xorq %rdi, %rdi
; Inst 13: movq %rsi, %rax
; Inst 14: movq %rdi, %rdx
; Inst 15: movq %rbp, %rsp
; Inst 16: popq %rbp
; Inst 17: ret
; }}
function %f29(i8, i128) -> i8 {
block0(v0: i8, v1: i128):
v2 = ishl v0, v1
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: movq %rsi, %rcx
; Inst 3: shlb %cl, %dil
; Inst 4: movq %rdi, %rax
; Inst 5: movq %rbp, %rsp
; Inst 6: popq %rbp
; Inst 7: ret
; }}
function %f30(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = ishl v0, v1
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: movq %rdi, %rax
; Inst 3: movq %rsi, %rdi
; Inst 4: movq %rax, %rsi
; Inst 5: movq %rdx, %rcx
; Inst 6: shlq %cl, %rsi
; Inst 7: movq %rdx, %rcx
; Inst 8: shlq %cl, %rdi
; Inst 9: movl $64, %ecx
; Inst 10: subq %rdx, %rcx
; Inst 11: shrq %cl, %rax
; Inst 12: xorq %rcx, %rcx
; Inst 13: testq $127, %rdx
; Inst 14: cmovzq %rcx, %rax
; Inst 15: orq %rdi, %rax
; Inst 16: testq $64, %rdx
; Inst 17: cmovzq %rsi, %rcx
; Inst 18: cmovzq %rax, %rsi
; Inst 19: movq %rcx, %rax
; Inst 20: movq %rsi, %rdx
; Inst 21: movq %rbp, %rsp
; Inst 22: popq %rbp
; Inst 23: ret
; }}
function %f31(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = ushr v0, v1
return v2
}
; 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 %rsi, %rax
; Inst 3: movq %rdx, %rcx
; Inst 4: shrq %cl, %rdi
; Inst 5: movq %rax, %rsi
; Inst 6: movq %rdx, %rcx
; Inst 7: shrq %cl, %rsi
; Inst 8: movl $64, %ecx
; Inst 9: subq %rdx, %rcx
; Inst 10: shlq %cl, %rax
; Inst 11: xorq %rcx, %rcx
; Inst 12: testq $127, %rdx
; Inst 13: cmovzq %rcx, %rax
; Inst 14: orq %rdi, %rax
; Inst 15: xorq %rcx, %rcx
; Inst 16: testq $64, %rdx
; Inst 17: movq %rsi, %rdi
; Inst 18: cmovzq %rax, %rdi
; Inst 19: cmovzq %rsi, %rcx
; Inst 20: movq %rdi, %rax
; Inst 21: movq %rcx, %rdx
; Inst 22: movq %rbp, %rsp
; Inst 23: popq %rbp
; Inst 24: ret
; }}
function %f32(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = sshr v0, v1
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 %rdi, %rax
; Inst 3: movq %rdx, %rcx
; Inst 4: shrq %cl, %rax
; Inst 5: movq %rsi, %rdi
; Inst 6: movq %rdx, %rcx
; Inst 7: sarq %cl, %rdi
; Inst 8: movl $64, %ecx
; Inst 9: subq %rdx, %rcx
; Inst 10: movq %rsi, %r8
; Inst 11: shlq %cl, %r8
; Inst 12: xorq %rcx, %rcx
; Inst 13: testq $127, %rdx
; Inst 14: cmovzq %rcx, %r8
; Inst 15: orq %r8, %rax
; Inst 16: sarq $63, %rsi
; Inst 17: testq $64, %rdx
; Inst 18: movq %rdi, %rcx
; Inst 19: cmovzq %rax, %rcx
; Inst 20: cmovzq %rdi, %rsi
; Inst 21: movq %rcx, %rax
; Inst 22: movq %rsi, %rdx
; Inst 23: movq %rbp, %rsp
; Inst 24: popq %rbp
; Inst 25: ret
; }}
function %f33(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = rotl v0, v1
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 48)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rax
; Inst 3: movq %rdx, %rcx
; Inst 4: shlq %cl, %rax
; Inst 5: movq %rsi, %r8
; Inst 6: movq %rdx, %rcx
; Inst 7: shlq %cl, %r8
; Inst 8: movl $64, %ecx
; Inst 9: subq %rdx, %rcx
; Inst 10: movq %rdi, %r9
; Inst 11: shrq %cl, %r9
; Inst 12: xorq %rcx, %rcx
; Inst 13: testq $127, %rdx
; Inst 14: cmovzq %rcx, %r9
; Inst 15: orq %r8, %r9
; Inst 16: testq $64, %rdx
; Inst 17: movq %rcx, %r8
; Inst 18: cmovzq %rax, %r8
; Inst 19: cmovzq %r9, %rax
; Inst 20: movl $128, %r9d
; Inst 21: subq %rdx, %r9
; Inst 22: movq %rdi, %rdx
; Inst 23: movq %r9, %rcx
; Inst 24: shrq %cl, %rdx
; Inst 25: movq %rsi, %rdi
; Inst 26: movq %r9, %rcx
; Inst 27: shrq %cl, %rdi
; Inst 28: movl $64, %ecx
; Inst 29: subq %r9, %rcx
; Inst 30: shlq %cl, %rsi
; Inst 31: xorq %rcx, %rcx
; Inst 32: testq $127, %r9
; Inst 33: cmovzq %rcx, %rsi
; Inst 34: orq %rdx, %rsi
; Inst 35: xorq %rdx, %rdx
; Inst 36: testq $64, %r9
; Inst 37: movq %rdi, %rcx
; Inst 38: cmovzq %rsi, %rcx
; Inst 39: movq %rdx, %rsi
; Inst 40: cmovzq %rdi, %rsi
; Inst 41: orq %rcx, %r8
; Inst 42: orq %rsi, %rax
; Inst 43: movq %rax, %rdx
; Inst 44: movq %r8, %rax
; Inst 45: movq %rbp, %rsp
; Inst 46: popq %rbp
; Inst 47: ret
; }}
function %f34(i128, i128) -> i128 {
block0(v0: i128, v1: i128):
v2 = rotr v0, v1
return v2
}
; VCode_ShowWithRRU {{
; Entry block: 0
; Block 0:
; (original IR block: block0)
; (instruction range: 0 .. 45)
; Inst 0: pushq %rbp
; Inst 1: movq %rsp, %rbp
; Inst 2: movq %rdi, %rax
; Inst 3: movq %rdx, %rcx
; Inst 4: shrq %cl, %rax
; Inst 5: movq %rsi, %r9
; Inst 6: movq %rdx, %rcx
; Inst 7: shrq %cl, %r9
; Inst 8: movl $64, %ecx
; Inst 9: subq %rdx, %rcx
; Inst 10: movq %rsi, %r8
; Inst 11: shlq %cl, %r8
; Inst 12: xorq %rcx, %rcx
; Inst 13: testq $127, %rdx
; Inst 14: cmovzq %rcx, %r8
; Inst 15: orq %rax, %r8
; Inst 16: xorq %rcx, %rcx
; Inst 17: testq $64, %rdx
; Inst 18: movq %r9, %rax
; Inst 19: cmovzq %r8, %rax
; Inst 20: movq %rcx, %r8
; Inst 21: cmovzq %r9, %r8
; Inst 22: movl $128, %r9d
; Inst 23: subq %rdx, %r9
; Inst 24: movq %rdi, %rdx
; Inst 25: movq %r9, %rcx
; Inst 26: shlq %cl, %rdx
; Inst 27: movq %r9, %rcx
; Inst 28: shlq %cl, %rsi
; Inst 29: movl $64, %ecx
; Inst 30: subq %r9, %rcx
; Inst 31: shrq %cl, %rdi
; Inst 32: xorq %rcx, %rcx
; Inst 33: testq $127, %r9
; Inst 34: cmovzq %rcx, %rdi
; Inst 35: orq %rsi, %rdi
; Inst 36: testq $64, %r9
; Inst 37: cmovzq %rdx, %rcx
; Inst 38: cmovzq %rdi, %rdx
; Inst 39: orq %rcx, %rax
; Inst 40: orq %rdx, %r8
; Inst 41: movq %r8, %rdx
; Inst 42: movq %rbp, %rsp
; Inst 43: popq %rbp
; Inst 44: ret
; }}