* riscv64: Remove unused code * riscv64: Group extend rules * riscv64: Remove more unused rules * riscv64: Cleanup existing extension rules * riscv64: Move the existing Extend rules to ISLE * riscv64: Use `sext.w` when extending * riscv64: Remove duplicate extend tests * riscv64: Use `zbb` instructions when extending values * riscv64: Use `zbkb` extensions when zero extending * riscv64: Enable additional tests for extend i128 * riscv64: Fix formatting for `Inst::Extend` * riscv64: Reverse register for pack * riscv64: Misc Cleanups * riscv64: Cleanup extend rules
2002 lines
32 KiB
Plaintext
2002 lines
32 KiB
Plaintext
test compile precise-output
|
|
set unwind_info=false
|
|
target riscv64
|
|
|
|
function %a(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a3,a0
|
|
; brev8 a0,a3##tmp=t2 tmp2=a2 step=a1 ty=i8
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a3, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 8
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 7
|
|
; addi a2, zero, 1
|
|
; slli a2, a2, 0
|
|
; blez a1, 0x34
|
|
; and t5, t2, a3
|
|
; beq zero, t5, 8
|
|
; or a0, a0, a2
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a1, t5
|
|
; bnez t5, 0xc
|
|
; srli a2, a2, 0xf
|
|
; j -0x28
|
|
; slli a2, a2, 1
|
|
; j -0x30
|
|
; ret
|
|
|
|
function %a(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a7,a0
|
|
; brev8 a2,a7##tmp=t2 tmp2=a0 step=a1 ty=i16
|
|
; rev8 a4,a2##step=a6 tmp=a5
|
|
; srli a0,a4,48
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a7, a0, 0
|
|
; ori a2, zero, 0
|
|
; addi a1, zero, 0x10
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0xf
|
|
; addi a0, zero, 1
|
|
; slli a0, a0, 8
|
|
; blez a1, 0x34
|
|
; and t5, t2, a7
|
|
; beq zero, t5, 8
|
|
; or a2, a2, a0
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a1, t5
|
|
; bnez t5, 0xc
|
|
; srli a0, a0, 0xf
|
|
; j -0x28
|
|
; slli a0, a0, 1
|
|
; j -0x30
|
|
; ori a4, zero, 0
|
|
; ori a5, a2, 0
|
|
; addi a6, zero, 0x38
|
|
; bltz a6, 0x1c
|
|
; andi t6, a5, 0xff
|
|
; sll t6, t6, a6
|
|
; or a4, a4, t6
|
|
; addi a6, a6, -8
|
|
; srli a5, a5, 8
|
|
; j -0x18
|
|
; srli a0, a4, 0x30
|
|
; ret
|
|
|
|
function %a(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a7,a0
|
|
; brev8 a2,a7##tmp=t2 tmp2=a0 step=a1 ty=i32
|
|
; rev8 a4,a2##step=a6 tmp=a5
|
|
; srli a0,a4,32
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a7, a0, 0
|
|
; ori a2, zero, 0
|
|
; addi a1, zero, 0x20
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x1f
|
|
; addi a0, zero, 1
|
|
; slli a0, a0, 0x18
|
|
; blez a1, 0x34
|
|
; and t5, t2, a7
|
|
; beq zero, t5, 8
|
|
; or a2, a2, a0
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a1, t5
|
|
; bnez t5, 0xc
|
|
; srli a0, a0, 0xf
|
|
; j -0x28
|
|
; slli a0, a0, 1
|
|
; j -0x30
|
|
; ori a4, zero, 0
|
|
; ori a5, a2, 0
|
|
; addi a6, zero, 0x38
|
|
; bltz a6, 0x1c
|
|
; andi t6, a5, 0xff
|
|
; sll t6, t6, a6
|
|
; or a4, a4, t6
|
|
; addi a6, a6, -8
|
|
; srli a5, a5, 8
|
|
; j -0x18
|
|
; srli a0, a4, 0x20
|
|
; ret
|
|
|
|
function %a(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a6,a0
|
|
; rev8 t2,a6##step=a1 tmp=a0
|
|
; brev8 a0,t2##tmp=a3 tmp2=a4 step=a5 ty=i64
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a6, a0, 0
|
|
; ori t2, zero, 0
|
|
; ori a0, a6, 0
|
|
; addi a1, zero, 0x38
|
|
; bltz a1, 0x1c
|
|
; andi t6, a0, 0xff
|
|
; sll t6, t6, a1
|
|
; or t2, t2, t6
|
|
; addi a1, a1, -8
|
|
; srli a0, a0, 8
|
|
; j -0x18
|
|
; ori a0, zero, 0
|
|
; addi a5, zero, 0x40
|
|
; addi a3, zero, 1
|
|
; slli a3, a3, 0x3f
|
|
; addi a4, zero, 1
|
|
; slli a4, a4, 0x38
|
|
; blez a5, 0x34
|
|
; and t5, a3, t2
|
|
; beq zero, t5, 8
|
|
; or a0, a0, a4
|
|
; addi a5, a5, -1
|
|
; srli a3, a3, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a5, t5
|
|
; bnez t5, 0xc
|
|
; srli a4, a4, 0xf
|
|
; j -0x28
|
|
; slli a4, a4, 1
|
|
; j -0x30
|
|
; ret
|
|
|
|
function %a(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = bitrev v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a3,a0
|
|
; mv a7,a1
|
|
; rev8 a0,a3##step=a2 tmp=a1
|
|
; brev8 a1,a0##tmp=a4 tmp2=a5 step=a6 ty=i64
|
|
; mv a3,a7
|
|
; rev8 t4,a3##step=t1 tmp=t0
|
|
; brev8 a0,t4##tmp=a4 tmp2=a3 step=a2 ty=i64
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a3, a0, 0
|
|
; ori a7, a1, 0
|
|
; ori a0, zero, 0
|
|
; ori a1, a3, 0
|
|
; addi a2, zero, 0x38
|
|
; bltz a2, 0x1c
|
|
; andi t6, a1, 0xff
|
|
; sll t6, t6, a2
|
|
; or a0, a0, t6
|
|
; addi a2, a2, -8
|
|
; srli a1, a1, 8
|
|
; j -0x18
|
|
; ori a1, zero, 0
|
|
; addi a6, zero, 0x40
|
|
; addi a4, zero, 1
|
|
; slli a4, a4, 0x3f
|
|
; addi a5, zero, 1
|
|
; slli a5, a5, 0x38
|
|
; blez a6, 0x34
|
|
; and t5, a4, a0
|
|
; beq zero, t5, 8
|
|
; or a1, a1, a5
|
|
; addi a6, a6, -1
|
|
; srli a4, a4, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a6, t5
|
|
; bnez t5, 0xc
|
|
; srli a5, a5, 0xf
|
|
; j -0x28
|
|
; slli a5, a5, 1
|
|
; j -0x30
|
|
; ori a3, a7, 0
|
|
; ori t4, zero, 0
|
|
; ori t0, a3, 0
|
|
; addi t1, zero, 0x38
|
|
; bltz t1, 0x1c
|
|
; andi t6, t0, 0xff
|
|
; sll t6, t6, t1
|
|
; or t4, t4, t6
|
|
; addi t1, t1, -8
|
|
; srli t0, t0, 8
|
|
; j -0x18
|
|
; ori a0, zero, 0
|
|
; addi a2, zero, 0x40
|
|
; addi a4, zero, 1
|
|
; slli a4, a4, 0x3f
|
|
; addi a3, zero, 1
|
|
; slli a3, a3, 0x38
|
|
; blez a2, 0x34
|
|
; and t5, a4, t4
|
|
; beq zero, t5, 8
|
|
; or a0, a0, a3
|
|
; addi a2, a2, -1
|
|
; srli a4, a4, 1
|
|
; addi t5, zero, 8
|
|
; rem t5, a2, t5
|
|
; bnez t5, 0xc
|
|
; srli a3, a3, 0xf
|
|
; j -0x28
|
|
; slli a3, a3, 1
|
|
; j -0x30
|
|
; ret
|
|
|
|
function %b(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; clz a0,a2##ty=i8 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 8
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 7
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %b(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; clz a0,a2##ty=i16 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x10
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0xf
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %b(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; clz a0,a2##ty=i32 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x20
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x1f
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %b(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; clz a0,a2##ty=i64 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x40
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x3f
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %b(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = clz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv t0,a1
|
|
; clz a2,t0##ty=i64 tmp=a3 step=a1
|
|
; clz a6,a0##ty=i64 tmp=a4 step=a5
|
|
; li t3,64
|
|
; select_reg t0,a6,zero##condition=(t3 eq a2)
|
|
; add a0,a2,t0
|
|
; li a1,0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori t0, a1, 0
|
|
; ori a2, zero, 0
|
|
; addi a1, zero, 0x40
|
|
; addi a3, zero, 1
|
|
; slli a3, a3, 0x3f
|
|
; blez a1, 0x1c
|
|
; and t5, a3, t0
|
|
; bne zero, t5, 0x14
|
|
; addi a2, a2, 1
|
|
; addi a1, a1, -1
|
|
; srli a3, a3, 1
|
|
; j -0x18
|
|
; ori a6, zero, 0
|
|
; addi a5, zero, 0x40
|
|
; addi a4, zero, 1
|
|
; slli a4, a4, 0x3f
|
|
; blez a5, 0x1c
|
|
; and t5, a4, a0
|
|
; bne zero, t5, 0x14
|
|
; addi a6, a6, 1
|
|
; addi a5, a5, -1
|
|
; srli a4, a4, 1
|
|
; j -0x18
|
|
; addi t3, zero, 0x40
|
|
; beq t3, a2, 0xc
|
|
; ori t0, zero, 0
|
|
; j 8
|
|
; ori t0, a6, 0
|
|
; add a0, a2, t0
|
|
; mv a1, zero
|
|
; ret
|
|
|
|
function %c(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli t2,a0,56
|
|
; srai a1,t2,56
|
|
; not a3,a0
|
|
; select_reg a5,a3,a0##condition=(a1 slt zero)
|
|
; clz t4,a5##ty=i8 tmp=a7 step=t3
|
|
; addi a0,t4,-1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli t2, a0, 0x38
|
|
; srai a1, t2, 0x38
|
|
; not a3, a0
|
|
; bltz a1, 0xc
|
|
; ori a5, a0, 0
|
|
; j 8
|
|
; ori a5, a3, 0
|
|
; ori t4, zero, 0
|
|
; addi t3, zero, 8
|
|
; addi a7, zero, 1
|
|
; slli a7, a7, 7
|
|
; blez t3, 0x1c
|
|
; and t5, a7, a5
|
|
; bne zero, t5, 0x14
|
|
; addi t4, t4, 1
|
|
; addi t3, t3, -1
|
|
; srli a7, a7, 1
|
|
; j -0x18
|
|
; addi a0, t4, -1
|
|
; ret
|
|
|
|
function %c(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli t2,a0,48
|
|
; srai a1,t2,48
|
|
; not a3,a0
|
|
; select_reg a5,a3,a0##condition=(a1 slt zero)
|
|
; clz t4,a5##ty=i16 tmp=a7 step=t3
|
|
; addi a0,t4,-1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli t2, a0, 0x30
|
|
; srai a1, t2, 0x30
|
|
; not a3, a0
|
|
; bltz a1, 0xc
|
|
; ori a5, a0, 0
|
|
; j 8
|
|
; ori a5, a3, 0
|
|
; ori t4, zero, 0
|
|
; addi t3, zero, 0x10
|
|
; addi a7, zero, 1
|
|
; slli a7, a7, 0xf
|
|
; blez t3, 0x1c
|
|
; and t5, a7, a5
|
|
; bne zero, t5, 0x14
|
|
; addi t4, t4, 1
|
|
; addi t3, t3, -1
|
|
; srli a7, a7, 1
|
|
; j -0x18
|
|
; addi a0, t4, -1
|
|
; ret
|
|
|
|
function %c(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; sext.w t2,a0
|
|
; not a1,a0
|
|
; select_reg a3,a1,a0##condition=(t2 slt zero)
|
|
; clz a7,a3##ty=i32 tmp=a5 step=a6
|
|
; addi a0,a7,-1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; sext.w t2, a0
|
|
; not a1, a0
|
|
; bltz t2, 0xc
|
|
; ori a3, a0, 0
|
|
; j 8
|
|
; ori a3, a1, 0
|
|
; ori a7, zero, 0
|
|
; addi a6, zero, 0x20
|
|
; addi a5, zero, 1
|
|
; slli a5, a5, 0x1f
|
|
; blez a6, 0x1c
|
|
; and t5, a5, a3
|
|
; bne zero, t5, 0x14
|
|
; addi a7, a7, 1
|
|
; addi a6, a6, -1
|
|
; srli a5, a5, 1
|
|
; j -0x18
|
|
; addi a0, a7, -1
|
|
; ret
|
|
|
|
function %c(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not t2,a0
|
|
; select_reg a1,t2,a0##condition=(a0 slt zero)
|
|
; clz a5,a1##ty=i64 tmp=a3 step=a4
|
|
; addi a0,a5,-1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not t2, a0
|
|
; bltz a0, 0xc
|
|
; ori a1, a0, 0
|
|
; j 8
|
|
; ori a1, t2, 0
|
|
; ori a5, zero, 0
|
|
; addi a4, zero, 0x40
|
|
; addi a3, zero, 1
|
|
; slli a3, a3, 0x3f
|
|
; blez a4, 0x1c
|
|
; and t5, a3, a1
|
|
; bne zero, t5, 0x14
|
|
; addi a5, a5, 1
|
|
; addi a4, a4, -1
|
|
; srli a3, a3, 1
|
|
; j -0x18
|
|
; addi a0, a5, -1
|
|
; ret
|
|
|
|
function %c(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = cls v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a2,a0
|
|
; select_reg a2,a2,a0##condition=(a1 slt zero)
|
|
; not a4,a1
|
|
; select_reg a6,a4,a1##condition=(a1 slt zero)
|
|
; clz t0,a6##ty=i64 tmp=t3 step=t4
|
|
; clz a1,a2##ty=i64 tmp=t2 step=a0
|
|
; li a3,64
|
|
; select_reg a5,a1,zero##condition=(a3 eq t0)
|
|
; add a7,t0,a5
|
|
; li t4,0
|
|
; addi a0,a7,-1
|
|
; li a1,0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a2, a0
|
|
; bltz a1, 8
|
|
; ori a2, a0, 0
|
|
; not a4, a1
|
|
; bltz a1, 0xc
|
|
; ori a6, a1, 0
|
|
; j 8
|
|
; ori a6, a4, 0
|
|
; ori t0, zero, 0
|
|
; addi t4, zero, 0x40
|
|
; addi t3, zero, 1
|
|
; slli t3, t3, 0x3f
|
|
; blez t4, 0x1c
|
|
; and t5, t3, a6
|
|
; bne zero, t5, 0x14
|
|
; addi t0, t0, 1
|
|
; addi t4, t4, -1
|
|
; srli t3, t3, 1
|
|
; j -0x18
|
|
; ori a1, zero, 0
|
|
; addi a0, zero, 0x40
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x3f
|
|
; blez a0, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a1, a1, 1
|
|
; addi a0, a0, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; addi a3, zero, 0x40
|
|
; beq a3, t0, 0xc
|
|
; ori a5, zero, 0
|
|
; j 8
|
|
; ori a5, a1, 0
|
|
; add a7, t0, a5
|
|
; mv t4, zero
|
|
; addi a0, a7, -1
|
|
; mv a1, zero
|
|
; ret
|
|
|
|
function %d(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; ctz a0,a2##ty=i8 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 8
|
|
; addi t2, zero, 1
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; slli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; ctz a0,a2##ty=i16 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x10
|
|
; addi t2, zero, 1
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; slli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; ctz a0,a2##ty=i32 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x20
|
|
; addi t2, zero, 1
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; slli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; ctz a0,a2##ty=i64 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x40
|
|
; addi t2, zero, 1
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; bne zero, t5, 0x14
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; slli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = ctz v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv t0,a0
|
|
; ctz a2,t0##ty=i64 tmp=a0 step=a3
|
|
; ctz a6,a1##ty=i64 tmp=a4 step=a5
|
|
; li t3,64
|
|
; select_reg t0,a6,zero##condition=(t3 eq a2)
|
|
; add a0,a2,t0
|
|
; li a1,0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori t0, a0, 0
|
|
; ori a2, zero, 0
|
|
; addi a3, zero, 0x40
|
|
; addi a0, zero, 1
|
|
; blez a3, 0x1c
|
|
; and t5, a0, t0
|
|
; bne zero, t5, 0x14
|
|
; addi a2, a2, 1
|
|
; addi a3, a3, -1
|
|
; slli a0, a0, 1
|
|
; j -0x18
|
|
; ori a6, zero, 0
|
|
; addi a5, zero, 0x40
|
|
; addi a4, zero, 1
|
|
; blez a5, 0x1c
|
|
; and t5, a4, a1
|
|
; bne zero, t5, 0x14
|
|
; addi a6, a6, 1
|
|
; addi a5, a5, -1
|
|
; slli a4, a4, 1
|
|
; j -0x18
|
|
; addi t3, zero, 0x40
|
|
; beq t3, a2, 0xc
|
|
; ori t0, zero, 0
|
|
; j 8
|
|
; ori t0, a6, 0
|
|
; add a0, a2, t0
|
|
; mv a1, zero
|
|
; ret
|
|
|
|
function %d(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv t3,a0
|
|
; popcnt a2,t3##ty=i64 tmp=a0 step=a3
|
|
; popcnt a6,a1##ty=i64 tmp=a4 step=a5
|
|
; add a0,a2,a6
|
|
; li a1,0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori t3, a0, 0
|
|
; ori a2, zero, 0
|
|
; addi a3, zero, 0x40
|
|
; addi a0, zero, 1
|
|
; slli a0, a0, 0x3f
|
|
; blez a3, 0x1c
|
|
; and t5, a0, t3
|
|
; beq zero, t5, 8
|
|
; addi a2, a2, 1
|
|
; addi a3, a3, -1
|
|
; srli a0, a0, 1
|
|
; j -0x18
|
|
; ori a6, zero, 0
|
|
; addi a5, zero, 0x40
|
|
; addi a4, zero, 1
|
|
; slli a4, a4, 0x3f
|
|
; blez a5, 0x1c
|
|
; and t5, a4, a1
|
|
; beq zero, t5, 8
|
|
; addi a6, a6, 1
|
|
; addi a5, a5, -1
|
|
; srli a4, a4, 1
|
|
; j -0x18
|
|
; add a0, a2, a6
|
|
; mv a1, zero
|
|
; ret
|
|
|
|
function %d(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; popcnt a0,a2##ty=i64 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x40
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x3f
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; beq zero, t5, 8
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; popcnt a0,a2##ty=i32 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x20
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0x1f
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; beq zero, t5, 8
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i16) -> i16 {
|
|
block0(v0: i16):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; popcnt a0,a2##ty=i16 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 0x10
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 0xf
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; beq zero, t5, 8
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %d(i8) -> i8 {
|
|
block0(v0: i8):
|
|
v1 = popcnt v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; mv a2,a0
|
|
; popcnt a0,a2##ty=i8 tmp=t2 step=a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a2, a0, 0
|
|
; ori a0, zero, 0
|
|
; addi a1, zero, 8
|
|
; addi t2, zero, 1
|
|
; slli t2, t2, 7
|
|
; blez a1, 0x1c
|
|
; and t5, t2, a2
|
|
; beq zero, t5, 8
|
|
; addi a0, a0, 1
|
|
; addi a1, a1, -1
|
|
; srli t2, t2, 1
|
|
; j -0x18
|
|
; ret
|
|
|
|
function %bnot_i32(i32) -> i32 {
|
|
block0(v0: i32):
|
|
v1 = bnot v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a0,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a0, a0
|
|
; ret
|
|
|
|
function %bnot_i64(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = bnot v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a0,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a0, a0
|
|
; ret
|
|
|
|
function %bnot_i64_with_shift(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = ishl.i64 v0, v1
|
|
v3 = bnot v2
|
|
return v3
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a0,a0,3
|
|
; not a0,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a0, a0, 3
|
|
; not a0, a0
|
|
; ret
|
|
|
|
function %bnot_i128(i128) -> i128 {
|
|
block0(v0: i128):
|
|
v1 = bnot v0
|
|
return v1
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a0,a0
|
|
; not a1,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a0, a0
|
|
; not a1, a1
|
|
; ret
|
|
|
|
function %band_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = band v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; and a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; and a0, a0, a1
|
|
; ret
|
|
|
|
function %band_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = band v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; and a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; and a0, a0, a1
|
|
; ret
|
|
|
|
function %band_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = band v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; and a0,a0,a2
|
|
; and a1,a1,a3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; and a0, a0, a2
|
|
; and a1, a1, a3
|
|
; ret
|
|
|
|
function %band_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = band v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a0, a0, 3
|
|
; ret
|
|
|
|
function %band_i64_constant2(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = band v1, v0
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a0, a0, 3
|
|
; ret
|
|
|
|
function %band_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = band v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; and a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; and a0, a0, a1
|
|
; ret
|
|
|
|
function %band_i64_constant_shift2(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = band v3, v0
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; and a0,a1,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; and a0, a1, a0
|
|
; ret
|
|
|
|
function %bor_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; or a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; or a0, a0, a1
|
|
; ret
|
|
|
|
function %bor_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; or a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; or a0, a0, a1
|
|
; ret
|
|
|
|
function %bor_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; or a0,a0,a2
|
|
; or a1,a1,a3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; or a0, a0, a2
|
|
; or a1, a1, a3
|
|
; ret
|
|
|
|
function %bor_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = bor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; ori a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a0, a0, 3
|
|
; ret
|
|
|
|
function %bor_i64_constant2(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = bor v1, v0
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; ori a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; ori a0, a0, 3
|
|
; ret
|
|
|
|
function %bor_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bor v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; or a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; or a0, a0, a1
|
|
; ret
|
|
|
|
function %bor_i64_constant_shift2(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bor v3, v0
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; or a0,a1,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; or a0, a1, a0
|
|
; ret
|
|
|
|
function %bxor_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bxor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; xor a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; xor a0, a0, a1
|
|
; ret
|
|
|
|
function %bxor_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bxor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; xor a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; xor a0, a0, a1
|
|
; ret
|
|
|
|
function %bxor_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bxor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; xor a0,a0,a2
|
|
; xor a1,a1,a3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; xor a0, a0, a2
|
|
; xor a1, a1, a3
|
|
; ret
|
|
|
|
function %bxor_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = bxor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; xori a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; xori a0, a0, 3
|
|
; ret
|
|
|
|
function %bxor_i64_constant2(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 3
|
|
v2 = bxor v1, v0
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; xori a0,a0,3
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; xori a0, a0, 3
|
|
; ret
|
|
|
|
function %bxor_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bxor v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; xor a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; xor a0, a0, a1
|
|
; ret
|
|
|
|
function %bxor_i64_constant_shift2(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 3
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bxor v3, v0
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a1,a1,3
|
|
; xor a0,a1,a0
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a1, a1, 3
|
|
; xor a0, a1, a0
|
|
; ret
|
|
|
|
function %band_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = band_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; and a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; and a0, a0, a1
|
|
; ret
|
|
|
|
function %band_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = band_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; and a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; and a0, a0, a1
|
|
; ret
|
|
|
|
function %band_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = band_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a4,a2
|
|
; not a6,a3
|
|
; and a0,a0,a4
|
|
; and a1,a1,a6
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a4, a2
|
|
; not a6, a3
|
|
; and a0, a0, a4
|
|
; and a1, a1, a6
|
|
; ret
|
|
|
|
function %band_not_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 4
|
|
v2 = band_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; li a1,4
|
|
; not a2,a1
|
|
; and a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; addi a1, zero, 4
|
|
; not a2, a1
|
|
; and a0, a0, a2
|
|
; ret
|
|
|
|
function %band_not_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 4
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = band_not v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a2,a1,4
|
|
; not a2,a2
|
|
; and a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a2, a1, 4
|
|
; not a2, a2
|
|
; and a0, a0, a2
|
|
; ret
|
|
|
|
function %bor_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; or a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; or a0, a0, a1
|
|
; ret
|
|
|
|
function %bor_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; or a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; or a0, a0, a1
|
|
; ret
|
|
|
|
function %bor_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a4,a2
|
|
; not a6,a3
|
|
; or a0,a0,a4
|
|
; or a1,a1,a6
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a4, a2
|
|
; not a6, a3
|
|
; or a0, a0, a4
|
|
; or a1, a1, a6
|
|
; ret
|
|
|
|
function %bor_not_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 4
|
|
v2 = bor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; li a1,4
|
|
; not a2,a1
|
|
; or a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; addi a1, zero, 4
|
|
; not a2, a1
|
|
; or a0, a0, a2
|
|
; ret
|
|
|
|
function %bor_not_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 4
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bor_not v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a2,a1,4
|
|
; not a2,a2
|
|
; or a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a2, a1, 4
|
|
; not a2, a2
|
|
; or a0, a0, a2
|
|
; ret
|
|
|
|
function %bxor_not_i32(i32, i32) -> i32 {
|
|
block0(v0: i32, v1: i32):
|
|
v2 = bxor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; xor a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; xor a0, a0, a1
|
|
; ret
|
|
|
|
function %bxor_not_i64(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = bxor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a1,a1
|
|
; xor a0,a0,a1
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a1, a1
|
|
; xor a0, a0, a1
|
|
; ret
|
|
|
|
function %bxor_not_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = bxor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; not a4,a2
|
|
; not a6,a3
|
|
; xor a0,a0,a4
|
|
; xor a1,a1,a6
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; not a4, a2
|
|
; not a6, a3
|
|
; xor a0, a0, a4
|
|
; xor a1, a1, a6
|
|
; ret
|
|
|
|
function %bxor_not_i64_constant(i64) -> i64 {
|
|
block0(v0: i64):
|
|
v1 = iconst.i64 4
|
|
v2 = bxor_not v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; li a1,4
|
|
; not a2,a1
|
|
; xor a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; addi a1, zero, 4
|
|
; not a2, a1
|
|
; xor a0, a0, a2
|
|
; ret
|
|
|
|
function %bxor_not_i64_constant_shift(i64, i64) -> i64 {
|
|
block0(v0: i64, v1: i64):
|
|
v2 = iconst.i64 4
|
|
v3 = ishl.i64 v1, v2
|
|
v4 = bxor_not v0, v3
|
|
return v4
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; slli a2,a1,4
|
|
; not a2,a2
|
|
; xor a0,a0,a2
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; slli a2, a1, 4
|
|
; not a2, a2
|
|
; xor a0, a0, a2
|
|
; ret
|
|
|
|
function %ishl_i128_i8(i128, i8) -> i128 {
|
|
block0(v0: i128, v1: i8):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a5,a4,a3
|
|
; sll a7,a0,a3
|
|
; srl t4,a0,a5
|
|
; select_reg t1,zero,t4##condition=(a3 eq zero)
|
|
; sll a0,a1,a3
|
|
; or a3,t1,a0
|
|
; li a4,64
|
|
; andi a6,a2,127
|
|
; select_reg a0,zero,a7##condition=(a6 uge a4)
|
|
; select_reg a1,a7,a3##condition=(a6 uge a4)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a5, a4, a3
|
|
; sll a7, a0, a3
|
|
; srl t4, a0, a5
|
|
; beqz a3, 0xc
|
|
; ori t1, t4, 0
|
|
; j 8
|
|
; ori t1, zero, 0
|
|
; sll a0, a1, a3
|
|
; or a3, t1, a0
|
|
; addi a4, zero, 0x40
|
|
; andi a6, a2, 0x7f
|
|
; bgeu a6, a4, 0xc
|
|
; ori a0, a7, 0
|
|
; j 8
|
|
; ori a0, zero, 0
|
|
; bgeu a6, a4, 0xc
|
|
; ori a1, a3, 0
|
|
; j 8
|
|
; ori a1, a7, 0
|
|
; ret
|
|
|
|
function %ishl_i128_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = ishl.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a6,a4,a3
|
|
; sll t3,a0,a3
|
|
; srl t0,a0,a6
|
|
; select_reg t2,zero,t0##condition=(a3 eq zero)
|
|
; sll a1,a1,a3
|
|
; or a3,t2,a1
|
|
; li a5,64
|
|
; andi a7,a2,127
|
|
; select_reg a0,zero,t3##condition=(a7 uge a5)
|
|
; select_reg a1,t3,a3##condition=(a7 uge a5)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a6, a4, a3
|
|
; sll t3, a0, a3
|
|
; srl t0, a0, a6
|
|
; beqz a3, 0xc
|
|
; ori t2, t0, 0
|
|
; j 8
|
|
; ori t2, zero, 0
|
|
; sll a1, a1, a3
|
|
; or a3, t2, a1
|
|
; addi a5, zero, 0x40
|
|
; andi a7, a2, 0x7f
|
|
; bgeu a7, a5, 0xc
|
|
; ori a0, t3, 0
|
|
; j 8
|
|
; ori a0, zero, 0
|
|
; bgeu a7, a5, 0xc
|
|
; ori a1, a3, 0
|
|
; j 8
|
|
; ori a1, t3, 0
|
|
; ret
|
|
|
|
function %ushr_i128_i8(i128, i8) -> i128 {
|
|
block0(v0: i128, v1: i8):
|
|
v2 = ushr.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a5,a4,a3
|
|
; sll a7,a1,a5
|
|
; select_reg t4,zero,a7##condition=(a3 eq zero)
|
|
; srl t1,a0,a3
|
|
; or a0,t4,t1
|
|
; li a4,64
|
|
; srl a5,a1,a3
|
|
; andi a6,a2,127
|
|
; select_reg a0,a5,a0##condition=(a6 uge a4)
|
|
; select_reg a1,zero,a5##condition=(a6 uge a4)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a5, a4, a3
|
|
; sll a7, a1, a5
|
|
; beqz a3, 0xc
|
|
; ori t4, a7, 0
|
|
; j 8
|
|
; ori t4, zero, 0
|
|
; srl t1, a0, a3
|
|
; or a0, t4, t1
|
|
; addi a4, zero, 0x40
|
|
; srl a5, a1, a3
|
|
; andi a6, a2, 0x7f
|
|
; bgeu a6, a4, 8
|
|
; j 8
|
|
; ori a0, a5, 0
|
|
; bgeu a6, a4, 0xc
|
|
; ori a1, a5, 0
|
|
; j 8
|
|
; ori a1, zero, 0
|
|
; ret
|
|
|
|
function %ushr_i128_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = ushr.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a6,a4,a3
|
|
; sll t3,a1,a6
|
|
; select_reg t0,zero,t3##condition=(a3 eq zero)
|
|
; srl t2,a0,a3
|
|
; or a5,t0,t2
|
|
; li a4,64
|
|
; srl a6,a1,a3
|
|
; andi a7,a2,127
|
|
; select_reg a0,a6,a5##condition=(a7 uge a4)
|
|
; select_reg a1,zero,a6##condition=(a7 uge a4)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a6, a4, a3
|
|
; sll t3, a1, a6
|
|
; beqz a3, 0xc
|
|
; ori t0, t3, 0
|
|
; j 8
|
|
; ori t0, zero, 0
|
|
; srl t2, a0, a3
|
|
; or a5, t0, t2
|
|
; addi a4, zero, 0x40
|
|
; srl a6, a1, a3
|
|
; andi a7, a2, 0x7f
|
|
; bgeu a7, a4, 0xc
|
|
; ori a0, a5, 0
|
|
; j 8
|
|
; ori a0, a6, 0
|
|
; bgeu a7, a4, 0xc
|
|
; ori a1, a6, 0
|
|
; j 8
|
|
; ori a1, zero, 0
|
|
; ret
|
|
|
|
function %sshr_i128_i8(i128, i8) -> i128 {
|
|
block0(v0: i128, v1: i8):
|
|
v2 = sshr.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a5,a4,a3
|
|
; sll a7,a1,a5
|
|
; select_reg t4,zero,a7##condition=(a3 eq zero)
|
|
; srl t1,a0,a3
|
|
; or a0,t4,t1
|
|
; li a4,64
|
|
; sra a4,a1,a3
|
|
; li a6,-1
|
|
; select_reg t3,a6,zero##condition=(a1 slt zero)
|
|
; li t0,64
|
|
; andi t2,a2,127
|
|
; select_reg a0,a4,a0##condition=(t2 uge t0)
|
|
; select_reg a1,t3,a4##condition=(t2 uge t0)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a5, a4, a3
|
|
; sll a7, a1, a5
|
|
; beqz a3, 0xc
|
|
; ori t4, a7, 0
|
|
; j 8
|
|
; ori t4, zero, 0
|
|
; srl t1, a0, a3
|
|
; or a0, t4, t1
|
|
; addi a4, zero, 0x40
|
|
; sra a4, a1, a3
|
|
; addi a6, zero, -1
|
|
; bltz a1, 0xc
|
|
; ori t3, zero, 0
|
|
; j 8
|
|
; ori t3, a6, 0
|
|
; addi t0, zero, 0x40
|
|
; andi t2, a2, 0x7f
|
|
; bgeu t2, t0, 8
|
|
; j 8
|
|
; ori a0, a4, 0
|
|
; bgeu t2, t0, 0xc
|
|
; ori a1, a4, 0
|
|
; j 8
|
|
; ori a1, t3, 0
|
|
; ret
|
|
|
|
function %sshr_i128_i128(i128, i128) -> i128 {
|
|
block0(v0: i128, v1: i128):
|
|
v2 = sshr.i128 v0, v1
|
|
return v2
|
|
}
|
|
|
|
; VCode:
|
|
; block0:
|
|
; andi a3,a2,63
|
|
; li a4,64
|
|
; sub a6,a4,a3
|
|
; sll t3,a1,a6
|
|
; select_reg t0,zero,t3##condition=(a3 eq zero)
|
|
; srl t2,a0,a3
|
|
; or a4,t0,t2
|
|
; li a5,64
|
|
; sra a5,a1,a3
|
|
; li a7,-1
|
|
; select_reg t4,a7,zero##condition=(a1 slt zero)
|
|
; li t1,64
|
|
; andi a1,a2,127
|
|
; select_reg a0,a5,a4##condition=(a1 uge t1)
|
|
; select_reg a1,t4,a5##condition=(a1 uge t1)
|
|
; ret
|
|
;
|
|
; Disassembled:
|
|
; block0: ; offset 0x0
|
|
; andi a3, a2, 0x3f
|
|
; addi a4, zero, 0x40
|
|
; sub a6, a4, a3
|
|
; sll t3, a1, a6
|
|
; beqz a3, 0xc
|
|
; ori t0, t3, 0
|
|
; j 8
|
|
; ori t0, zero, 0
|
|
; srl t2, a0, a3
|
|
; or a4, t0, t2
|
|
; addi a5, zero, 0x40
|
|
; sra a5, a1, a3
|
|
; addi a7, zero, -1
|
|
; bltz a1, 0xc
|
|
; ori t4, zero, 0
|
|
; j 8
|
|
; ori t4, a7, 0
|
|
; addi t1, zero, 0x40
|
|
; andi a1, a2, 0x7f
|
|
; bgeu a1, t1, 0xc
|
|
; ori a0, a4, 0
|
|
; j 8
|
|
; ori a0, a5, 0
|
|
; bgeu a1, t1, 0xc
|
|
; ori a1, a5, 0
|
|
; j 8
|
|
; ori a1, t4, 0
|
|
; ret
|
|
|