As a follow-up to #5780, disassemble the regions identified by bb_starts, falling back on disassembling the whole buffer. This ensures that instructions like br_table that introduce a lot of constants don't throw off capstone for the remainder of the function. --------- Co-authored-by: Jamey Sharp <jamey@minilop.net>
1014 lines
18 KiB
Plaintext
1014 lines
18 KiB
Plaintext
test compile precise-output
|
|
set enable_llvm_abi_extensions=true
|
|
target x86_64
|
|
|
|
|
|
|
|
function %ishl_i128_i128(i128, i8) -> i128 {
|
|
block0(v0: i128, v1: i8):
|
|
v2 = uextend.i64 v1
|
|
v3 = iconcat v2, v2
|
|
|
|
v4 = ishl.i128 v0, v3
|
|
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movzbq %dl, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx, %rdx
|
|
; movq %rsi, %r11
|
|
; shlq %cl, %r11, %r11
|
|
; movq %rcx, %r9
|
|
; movl $64, %ecx
|
|
; movq %r9, %r8
|
|
; subq %rcx, %r8, %rcx
|
|
; movq %rdi, %r10
|
|
; shrq %cl, %r10, %r10
|
|
; xorq %rax, %rax, %rax
|
|
; testq $127, %r8
|
|
; cmovzq %rax, %r10, %r10
|
|
; orq %r10, %r11, %r10
|
|
; testq $64, %r8
|
|
; cmovzq %rdx, %rax, %rax
|
|
; cmovzq %r10, %rdx, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movzbq %dl, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx
|
|
; movq %rsi, %r11
|
|
; shlq %cl, %r11
|
|
; movq %rcx, %r9
|
|
; movl $0x40, %ecx
|
|
; movq %r9, %r8
|
|
; subq %r8, %rcx
|
|
; movq %rdi, %r10
|
|
; shrq %cl, %r10
|
|
; xorq %rax, %rax
|
|
; testq $0x7f, %r8
|
|
; cmoveq %rax, %r10
|
|
; orq %r11, %r10
|
|
; testq $0x40, %r8
|
|
; cmoveq %rdx, %rax
|
|
; cmoveq %r10, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i128_i64(i128, i64) -> i128 {
|
|
block0(v0: i128, v1: i64):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10, %r10
|
|
; movq %rcx, %r9
|
|
; movl $64, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rcx, %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9, %r9
|
|
; xorq %rax, %rax, %rax
|
|
; testq $127, %rsi
|
|
; cmovzq %rax, %r9, %r9
|
|
; orq %r9, %r10, %r9
|
|
; testq $64, %rsi
|
|
; cmovzq %rdx, %rax, %rax
|
|
; cmovzq %r9, %rdx, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10
|
|
; movq %rcx, %r9
|
|
; movl $0x40, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9
|
|
; xorq %rax, %rax
|
|
; testq $0x7f, %rsi
|
|
; cmoveq %rax, %r9
|
|
; orq %r10, %r9
|
|
; testq $0x40, %rsi
|
|
; cmoveq %rdx, %rax
|
|
; cmoveq %r9, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i128_i32(i128, i32) -> i128 {
|
|
block0(v0: i128, v1: i32):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10, %r10
|
|
; movq %rcx, %r9
|
|
; movl $64, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rcx, %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9, %r9
|
|
; xorq %rax, %rax, %rax
|
|
; testq $127, %rsi
|
|
; cmovzq %rax, %r9, %r9
|
|
; orq %r9, %r10, %r9
|
|
; testq $64, %rsi
|
|
; cmovzq %rdx, %rax, %rax
|
|
; cmovzq %r9, %rdx, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10
|
|
; movq %rcx, %r9
|
|
; movl $0x40, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9
|
|
; xorq %rax, %rax
|
|
; testq $0x7f, %rsi
|
|
; cmoveq %rax, %r9
|
|
; orq %r10, %r9
|
|
; testq $0x40, %rsi
|
|
; cmoveq %rdx, %rax
|
|
; cmoveq %r9, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i128_i16(i128, i16) -> i128 {
|
|
block0(v0: i128, v1: i16):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10, %r10
|
|
; movq %rcx, %r9
|
|
; movl $64, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rcx, %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9, %r9
|
|
; xorq %rax, %rax, %rax
|
|
; testq $127, %rsi
|
|
; cmovzq %rax, %r9, %r9
|
|
; orq %r9, %r10, %r9
|
|
; testq $64, %rsi
|
|
; cmovzq %rdx, %rax, %rax
|
|
; cmovzq %r9, %rdx, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10
|
|
; movq %rcx, %r9
|
|
; movl $0x40, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9
|
|
; xorq %rax, %rax
|
|
; testq $0x7f, %rsi
|
|
; cmoveq %rax, %r9
|
|
; orq %r10, %r9
|
|
; testq $0x40, %rsi
|
|
; cmoveq %rdx, %rax
|
|
; cmoveq %r9, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i128_i8(i128, i8) -> i128 {
|
|
block0(v0: i128, v1: i8):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10, %r10
|
|
; movq %rcx, %r9
|
|
; movl $64, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rcx, %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9, %r9
|
|
; xorq %rax, %rax, %rax
|
|
; testq $127, %rsi
|
|
; cmovzq %rax, %r9, %r9
|
|
; orq %r9, %r10, %r9
|
|
; testq $64, %rsi
|
|
; cmovzq %rdx, %rax, %rax
|
|
; cmovzq %r9, %rdx, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdx, %rcx
|
|
; movq %rdi, %rdx
|
|
; shlq %cl, %rdx
|
|
; movq %rsi, %r10
|
|
; shlq %cl, %r10
|
|
; movq %rcx, %r9
|
|
; movl $0x40, %ecx
|
|
; movq %r9, %rsi
|
|
; subq %rsi, %rcx
|
|
; movq %rdi, %r9
|
|
; shrq %cl, %r9
|
|
; xorq %rax, %rax
|
|
; testq $0x7f, %rsi
|
|
; cmoveq %rax, %r9
|
|
; orq %r10, %r9
|
|
; testq $0x40, %rsi
|
|
; cmoveq %rdx, %rax
|
|
; cmoveq %r9, %rdx
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_i128(i64, i128) -> i64 {
|
|
block0(v0: i64, v1: i128):
|
|
v2 = ishl.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_i128(i32, i128) -> i32 {
|
|
block0(v0: i32, v1: i128):
|
|
v2 = ishl.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_i128(i16, i128) -> i16 {
|
|
block0(v0: i16, v1: i128):
|
|
v2 = ishl.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $15, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $0xf, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_i128(i8, i128) -> i8 {
|
|
block0(v0: i8, v1: i128):
|
|
v2 = ishl.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = ishl.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_i32(i64, i32) -> i64 {
|
|
block0(v0: i64, v1: i32):
|
|
v2 = ishl.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_i16(i64, i16) -> i64 {
|
|
block0(v0: i64, v1: i16):
|
|
v2 = ishl.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_i8(i64, i8) -> i64 {
|
|
block0(v0: i64, v1: i8):
|
|
v2 = ishl.i64 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shlq %cl, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_i64(i32, i64) -> i32 {
|
|
block0(v0: i32, v1: i64):
|
|
v2 = ishl.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = ishl.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_i16(i32, i16) -> i32 {
|
|
block0(v0: i32, v1: i16):
|
|
v2 = ishl.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_i8(i32, i8) -> i32 {
|
|
block0(v0: i32, v1: i8):
|
|
v2 = ishl.i32 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; movq %rdi, %rax
|
|
; shll %cl, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_i64(i16, i64) -> i16 {
|
|
block0(v0: i16, v1: i64):
|
|
v2 = ishl.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $15, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $0xf, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_i32(i16, i32) -> i16 {
|
|
block0(v0: i16, v1: i32):
|
|
v2 = ishl.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $15, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $0xf, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_i16(i16, i16) -> i16 {
|
|
block0(v0: i16, v1: i16):
|
|
v2 = ishl.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $15, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $0xf, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_i8(i16, i8) -> i16 {
|
|
block0(v0: i16, v1: i8):
|
|
v2 = ishl.i16 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $15, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $0xf, %rcx
|
|
; movq %rdi, %rax
|
|
; shlw %cl, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_i64(i8, i64) -> i8 {
|
|
block0(v0: i8, v1: i64):
|
|
v2 = ishl.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_i32(i8, i32) -> i8 {
|
|
block0(v0: i8, v1: i32):
|
|
v2 = ishl.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_i16(i8, i16) -> i8 {
|
|
block0(v0: i8, v1: i16):
|
|
v2 = ishl.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_i8(i8, i8) -> i8 {
|
|
block0(v0: i8, v1: i8):
|
|
v2 = ishl.i8 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rsi, %rcx
|
|
; andq %rcx, $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rsi, %rcx
|
|
; andq $7, %rcx
|
|
; movq %rdi, %rax
|
|
; shlb %cl, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i64_const(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = ishl_imm.i64 v0, 65
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdi, %rax
|
|
; shlq $1, %rax, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdi, %rax
|
|
; shlq $1, %rax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i32_const(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = ishl_imm.i32 v0, 33
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdi, %rax
|
|
; shll $1, %eax, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdi, %rax
|
|
; shll $1, %eax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i16_const(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = ishl_imm.i16 v0, 17
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdi, %rax
|
|
; shlw $1, %ax, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdi, %rax
|
|
; shlw $1, %ax
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|
|
function %ishl_i8_const(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = ishl_imm.i8 v0, 9
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block0:
|
|
; movq %rdi, %rax
|
|
; shlb $1, %al, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; pushq %rbp
|
|
; movq %rsp, %rbp
|
|
; block1: ; offset 0x4
|
|
; movq %rdi, %rax
|
|
; shlb $1, %al
|
|
; movq %rbp, %rsp
|
|
; popq %rbp
|
|
; retq
|
|
|