riscv64: Improve signed and zero extend codegen (#5844)

* 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
This commit is contained in:
Afonso Bordado
2023-02-22 17:41:14 +00:00
committed by GitHub
parent 6e6a1034d7
commit f6c6bc2155
68 changed files with 1922 additions and 1585 deletions

View File

@@ -19,8 +19,7 @@ block0(v0: i64, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a2, a1, 0x20
; srai a2, a2, 0x20
; sext.w a2, a1
; add a2, a0, a2
; lw a0, 0(a2)
; ret
@@ -42,8 +41,7 @@ block0(v0: i64, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a2, a1, 0x20
; srai a2, a2, 0x20
; sext.w a2, a1
; add a2, a2, a0
; lw a0, 0(a2)
; ret
@@ -59,20 +57,22 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; uext.w a3,a0
; uext.w a4,a1
; add a3,a3,a4
; lw a0,0(a3)
; slli a4,a0,32
; srli a6,a4,32
; slli a4,a1,32
; srli a7,a4,32
; add a5,a6,a7
; lw a0,0(a5)
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a3, a0, 0x20
; srli a3, a3, 0x20
; slli a4, a0, 0x20
; srli a6, a4, 0x20
; slli a4, a1, 0x20
; srli a4, a4, 0x20
; add a3, a3, a4
; lw a0, 0(a3)
; srli a7, a4, 0x20
; add a5, a6, a7
; lw a0, 0(a5)
; ret
function %f8(i64, i32) -> i32 {
@@ -97,8 +97,7 @@ block0(v0: i64, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a4, a1, 0x20
; srai a4, a4, 0x20
; sext.w a4, a1
; addi a4, a4, 0x20
; add a4, a4, a0
; add a4, a4, a4
@@ -261,8 +260,7 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srai a0, a0, 0x20
; sext.w a0, a0
; lw a0, 0(a0)
; ret
@@ -285,10 +283,8 @@ block0(v0: i32, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a3, a0, 0x20
; srai a3, a3, 0x20
; slli a4, a1, 0x20
; srai a4, a4, 0x20
; sext.w a3, a0
; sext.w a4, a1
; add a3, a3, a4
; lw a0, 0(a3)
; ret
@@ -305,8 +301,9 @@ block0(v0: i64, v1: i64, v2: i64):
; block0:
; lui a3,1048575
; addi a3,a3,4094
; uext.w a6,a3
; lh a0,0(a6)
; slli a6,a3,32
; srli t3,a6,32
; lh a0,0(t3)
; ret
;
; Disassembled:
@@ -314,8 +311,8 @@ block0(v0: i64, v1: i64, v2: i64):
; lui a3, 0xfffff
; addi a3, a3, -2
; slli a6, a3, 0x20
; srli a6, a6, 0x20
; lh a0, 0(a6)
; srli t3, a6, 0x20
; lh a0, 0(t3)
; ret
function %f19(i64, i64, i64) -> i32 {
@@ -330,8 +327,9 @@ block0(v0: i64, v1: i64, v2: i64):
; block0:
; lui a3,1
; addi a3,a3,2
; uext.w a6,a3
; lh a0,0(a6)
; slli a6,a3,32
; srli t3,a6,32
; lh a0,0(t3)
; ret
;
; Disassembled:
@@ -339,8 +337,8 @@ block0(v0: i64, v1: i64, v2: i64):
; lui a3, 1
; addi a3, a3, 2
; slli a6, a3, 0x20
; srli a6, a6, 0x20
; lh a0, 0(a6)
; srli t3, a6, 0x20
; lh a0, 0(t3)
; ret
function %f20(i64, i64, i64) -> i32 {
@@ -363,8 +361,7 @@ block0(v0: i64, v1: i64, v2: i64):
; block0: ; offset 0x0
; lui a3, 0xfffff
; addi a3, a3, -2
; slli a6, a3, 0x20
; srai a6, a6, 0x20
; sext.w a6, a3
; lh a0, 0(a6)
; ret
@@ -388,8 +385,7 @@ block0(v0: i64, v1: i64, v2: i64):
; block0: ; offset 0x0
; lui a3, 1
; addi a3, a3, 2
; slli a6, a3, 0x20
; srai a6, a6, 0x20
; sext.w a6, a3
; lh a0, 0(a6)
; ret
@@ -554,8 +550,7 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a2, a0, 0x20
; srai a2, a2, 0x20
; sext.w a2, a0
; ld a0, 0(a2)
; ld a1, 8(a2)
; sd a0, 0(a2)
@@ -585,8 +580,7 @@ block0(v0: i64, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a4, a1, 0x20
; srai a4, a4, 0x20
; sext.w a4, a1
; add a4, a0, a4
; addi a4, a4, 0x18
; ld a0, 0(a4)

View File

@@ -274,10 +274,8 @@ block0(v0: i32, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srai a0, a0, 0x20
; slli a2, a1, 0x20
; srai a2, a2, 0x20
; sext.w a0, a0
; sext.w a2, a1
; addi a4, zero, -1
; addi a6, zero, 1
; slli t3, a6, 0x3f
@@ -324,11 +322,9 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srai t2, t2, 0x20
; sext.w t2, a0
; addi a1, zero, 2
; slli a3, a1, 0x20
; srai a3, a3, 0x20
; sext.w a3, a1
; addi a5, zero, -1
; addi a7, zero, 1
; slli t4, a7, 0x3f
@@ -357,23 +353,23 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; mv a5,a0
; uext.w a0,a1
; trap_ifc int_divz##(zero eq a0)
; uext.w a3,a5
; divuw a0,a3,a0
; slli a1,a1,32
; srli a2,a1,32
; trap_ifc int_divz##(zero eq a2)
; slli a5,a0,32
; srli a7,a5,32
; divuw a0,a7,a2
; ret
;
; Disassembled:
; block0: ; offset 0x0
; ori a5, a0, 0
; slli a0, a1, 0x20
; srli a0, a0, 0x20
; bne zero, a0, 8
; slli a1, a1, 0x20
; srli a2, a1, 0x20
; bne zero, a2, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: int_divz
; slli a3, a5, 0x20
; srli a3, a3, 0x20
; divuw a0, a3, a0
; slli a5, a0, 0x20
; srli a7, a5, 0x20
; divuw a0, a7, a2
; ret
function %f15(i32) -> i32 {
@@ -386,22 +382,24 @@ block0(v0: i32):
; VCode:
; block0:
; li t2,2
; uext.w a1,t2
; trap_ifc int_divz##(zero eq a1)
; uext.w a4,a0
; divuw a0,a4,a1
; slli a1,t2,32
; srli a3,a1,32
; trap_ifc int_divz##(zero eq a3)
; slli a6,a0,32
; srli t3,a6,32
; divuw a0,t3,a3
; ret
;
; Disassembled:
; block0: ; offset 0x0
; addi t2, zero, 2
; slli a1, t2, 0x20
; srli a1, a1, 0x20
; bne zero, a1, 8
; srli a3, a1, 0x20
; bne zero, a3, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: int_divz
; slli a4, a0, 0x20
; srli a4, a4, 0x20
; divuw a0, a4, a1
; slli a6, a0, 0x20
; srli t3, a6, 0x20
; divuw a0, t3, a3
; ret
function %f16(i32, i32) -> i32 {
@@ -419,8 +417,7 @@ block0(v0: i32, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a1, a1, 0x20
; srai a1, a1, 0x20
; sext.w a1, a1
; bne zero, a1, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: int_divz
; remw a0, a0, a1
@@ -434,18 +431,19 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; uext.w a1,a1
; trap_ifc int_divz##(zero eq a1)
; remuw a0,a0,a1
; slli a1,a1,32
; srli a2,a1,32
; trap_ifc int_divz##(zero eq a2)
; remuw a0,a0,a2
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a1, a1, 0x20
; srli a1, a1, 0x20
; bne zero, a1, 8
; srli a2, a1, 0x20
; bne zero, a2, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: int_divz
; remuw a0, a0, a1
; remuw a0, a0, a2
; ret
function %f18(i64, i64) -> i64 {

View File

@@ -47,16 +47,17 @@ block0(v0: i64):
; VCode:
; block0:
; atomic_load.i32 a0,(a0)
; uext.w a0,a0
; atomic_load.i32 a1,(a0)
; slli a0,a1,32
; srli a0,a0,32
; ret
;
; Disassembled:
; block0: ; offset 0x0
; fence rw, rw
; lw a0, 0(a0)
; lw a1, 0(a0)
; fence r, rw
; slli a0, a0, 0x20
; slli a0, a1, 0x20
; srli a0, a0, 0x20
; ret

View File

@@ -436,34 +436,35 @@ block0(v0: i8):
; VCode:
; block0:
; sext.b t2,a0
; not a1,a0
; select_reg a3,a1,a0##condition=(t2 slt zero)
; clz a7,a3##ty=i8 tmp=a5 step=a6
; addi a0,a7,-1
; 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 t2, t2, 0x38
; not a1, a0
; bltz t2, 0xc
; ori a3, a0, 0
; srai a1, t2, 0x38
; not a3, a0
; bltz a1, 0xc
; ori a5, a0, 0
; j 8
; ori a3, a1, 0
; ori a7, zero, 0
; addi a6, zero, 8
; addi a5, zero, 1
; slli a5, a5, 7
; blez a6, 0x1c
; and t5, a5, a3
; 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 a7, a7, 1
; addi a6, a6, -1
; srli a5, a5, 1
; addi t4, t4, 1
; addi t3, t3, -1
; srli a7, a7, 1
; j -0x18
; addi a0, a7, -1
; addi a0, t4, -1
; ret
function %c(i16) -> i16 {
@@ -474,34 +475,35 @@ block0(v0: i16):
; VCode:
; block0:
; sext.h t2,a0
; not a1,a0
; select_reg a3,a1,a0##condition=(t2 slt zero)
; clz a7,a3##ty=i16 tmp=a5 step=a6
; addi a0,a7,-1
; 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 t2, t2, 0x30
; not a1, a0
; bltz t2, 0xc
; ori a3, a0, 0
; srai a1, t2, 0x30
; not a3, a0
; bltz a1, 0xc
; ori a5, a0, 0
; j 8
; ori a3, a1, 0
; ori a7, zero, 0
; addi a6, zero, 0x10
; addi a5, zero, 1
; slli a5, a5, 0xf
; blez a6, 0x1c
; and t5, a5, a3
; 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 a7, a7, 1
; addi a6, a6, -1
; srli a5, a5, 1
; addi t4, t4, 1
; addi t3, t3, -1
; srli a7, a7, 1
; j -0x18
; addi a0, a7, -1
; addi a0, t4, -1
; ret
function %c(i32) -> i32 {
@@ -521,8 +523,7 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srai t2, t2, 0x20
; sext.w t2, a0
; not a1, a0
; bltz t2, 0xc
; ori a3, a0, 0

View File

@@ -55,7 +55,7 @@ block0(v0: i32):
; sd fp,0(sp)
; mv fp,sp
; block0:
; uext.w a0,a0
; slli a0,a0,32; srli a0,a0,32
; load_sym a2,%g+0
; callind a2
; ld ra,8(sp)
@@ -90,7 +90,7 @@ block0(v0: i32):
; VCode:
; block0:
; uext.w a0,a0
; slli a0,a0,32; srli a0,a0,32
; ret
;
; Disassembled:
@@ -113,7 +113,7 @@ block0(v0: i32):
; sd fp,0(sp)
; mv fp,sp
; block0:
; sext.w a0,a0
; slli a0,a0,32; srai a0,a0,32
; load_sym a2,%g+0
; callind a2
; ld ra,8(sp)
@@ -148,7 +148,7 @@ block0(v0: i32):
; VCode:
; block0:
; sext.w a0,a0
; slli a0,a0,32; srai a0,a0,32
; ret
;
; Disassembled:
@@ -183,7 +183,7 @@ block0(v0: i8):
; li a5,42
; li a6,42
; li a7,42
; sext.b t3,t3
; slli t3,t3,56; srai t3,t3,56
; sd t3,0(sp)
; load_sym t3,%g+0
; callind t3
@@ -250,7 +250,7 @@ block0(v0: i8):
; sw t0,24(a1)
; sw t2,32(a1)
; sw a2,40(a1)
; sext.b t4,a0
; slli t4,a0,56; srai t4,t4,56
; sd a0,48(a1)
; mv a0,t1
; mv a1,a3

View File

@@ -705,7 +705,7 @@ block1:
; VCode:
; block0:
; addiw t2,a0,0
; sext.w t2,a0
; bne t2,zero,taken(label1),not_taken(label2)
; block1:
; j label3

View File

@@ -39,8 +39,8 @@ block0(v0: i8):
; VCode:
; block0:
; li t2,42
; uext.b a1,a0
; uext.b a3,t2
; andi a1,a0,255
; andi a3,t2,255
; eq a0,a1,a3##ty=i8
; ret
;
@@ -108,9 +108,9 @@ block0(v0: i32, v1: i8, v2: i8):
; VCode:
; block0:
; addiw a3,a0,0
; sext.w a3,a0
; li a4,42
; addiw a5,a4,0
; sext.w a5,a4
; select_reg a0,a1,a2##condition=(a3 eq a5)
; ret
;

View File

@@ -0,0 +1,152 @@
test compile precise-output
set unwind_info=false
target riscv64
function %uextend_i64_i128(i64) -> i128 {
block0(v0: i64):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; mv a1, zero
; ret
function %uextend_i32_i128(i32) -> i128 {
block0(v0: i32):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,32
; srli a0,t2,32
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srli a0, t2, 0x20
; mv a1, zero
; ret
function %uextend_i16_i128(i16) -> i128 {
block0(v0: i16):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srli a0,t2,48
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srli a0, t2, 0x30
; mv a1, zero
; ret
function %uextend_i8_i128(i8) -> i128 {
block0(v0: i8):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; andi a0,a0,255
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; mv a1, zero
; ret
function %sextend_i64_i128(i64) -> i128 {
block0(v0: i64):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; srai a1,a0,63
; ret
;
; Disassembled:
; block0: ; offset 0x0
; srai a1, a0, 0x3f
; ret
function %sextend_i32_i128(i32) -> i128 {
block0(v0: i32):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; sext.w a0,a0
; srai a1,a0,63
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sext.w a0, a0
; srai a1, a0, 0x3f
; ret
function %sextend_i16_i128(i16) -> i128 {
block0(v0: i16):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srai a0,t2,48
; srai a1,a0,63
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srai a0, t2, 0x30
; srai a1, a0, 0x3f
; ret
function %sextend_i8_i128(i8) -> i128 {
block0(v0: i8):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,56
; srai a0,t2,56
; srai a1,a0,63
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai a0, t2, 0x38
; srai a1, a0, 0x3f
; ret

View File

@@ -1,202 +0,0 @@
test compile precise-output
set unwind_info=false
target riscv64
function %f(i8) -> i64 {
block0(v0: i8):
v1 = sextend.i64 v0
v2 = iconst.i64 42
v3 = iadd.i64 v2, v1
return v3
}
; VCode:
; block0:
; sext.b a0,a0
; addi a0,a0,42
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; addi a0, a0, 0x2a
; ret
function %f2(i8, i64) -> i64 {
block0(v0: i8, v1: i64):
v2 = sextend.i64 v0
v3 = iadd.i64 v2, v1
return v3
}
; VCode:
; block0:
; sext.b a2,a0
; add a0,a2,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a2, a0, 0x38
; srai a2, a2, 0x38
; add a0, a2, a1
; ret
function %i128_uextend_i64(i64) -> i128 {
block0(v0: i64):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; mv a1, zero
; ret
function %i128_sextend_i64(i64) -> i128 {
block0(v0: i64):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; slt t2,a0,zero
; sext.b1 a1,t2
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sltz t2, a0
; slli a1, t2, 0x3f
; srai a1, a1, 0x3f
; ret
function %i128_uextend_i32(i32) -> i128 {
block0(v0: i32):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; uext.w a0,a0
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srli a0, a0, 0x20
; mv a1, zero
; ret
function %i128_sextend_i32(i32) -> i128 {
block0(v0: i32):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; sext.w a0,a0
; slt a1,a0,zero
; sext.b1 a1,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srai a0, a0, 0x20
; sltz a1, a0
; slli a1, a1, 0x3f
; srai a1, a1, 0x3f
; ret
function %i128_uextend_i16(i16) -> i128 {
block0(v0: i16):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; uext.h a0,a0
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; mv a1, zero
; ret
function %i128_sextend_i16(i16) -> i128 {
block0(v0: i16):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; sext.h a0,a0
; slt a1,a0,zero
; sext.b1 a1,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srai a0, a0, 0x30
; sltz a1, a0
; slli a1, a1, 0x3f
; srai a1, a1, 0x3f
; ret
function %i128_uextend_i8(i8) -> i128 {
block0(v0: i8):
v1 = uextend.i128 v0
return v1
}
; VCode:
; block0:
; uext.b a0,a0
; li a1,0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; mv a1, zero
; ret
function %i128_sextend_i8(i8) -> i128 {
block0(v0: i8):
v1 = sextend.i128 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; slt a1,a0,zero
; sext.b1 a1,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; sltz a1, a0
; slli a1, a1, 0x3f
; srai a1, a1, 0x3f
; ret

View File

@@ -0,0 +1,136 @@
test compile precise-output
set unwind_info=false
target riscv64 has_zbb=true
;;;; Uextend rules
function %uextend16_32(i16) -> i32 {
block0(v0: i16):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; zext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x3b, 0x45, 0x05, 0x08
; ret
function %uextend8_64(i8) -> i64 {
block0(v0: i8):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; andi a0,a0,255
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %uextend16_64(i16) -> i64 {
block0(v0: i16):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; zext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x3b, 0x45, 0x05, 0x08
; ret
;;;; Sextend Rules
function %sextend8_16(i8) -> i16 {
block0(v0: i8):
v1 = sextend.i16 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x13, 0x15, 0x45, 0x60
; ret
function %sextend8_32(i8) -> i32 {
block0(v0: i8):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x13, 0x15, 0x45, 0x60
; ret
function %sextend16_32(i16) -> i32 {
block0(v0: i16):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; sext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x13, 0x15, 0x55, 0x60
; ret
function %sextend8_64(i8) -> i64 {
block0(v0: i8):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x13, 0x15, 0x45, 0x60
; ret
function %sextend16_64(i16) -> i64 {
block0(v0: i16):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x13, 0x15, 0x55, 0x60
; ret

View File

@@ -0,0 +1,53 @@
test compile precise-output
set unwind_info=false
target riscv64 has_zbkb=true
function %uextend16_32(i16) -> i32 {
block0(v0: i16):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; packw a0,a0,zero
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x3b, 0x45, 0x05, 0x08
; ret
function %uextend16_64(i16) -> i64 {
block0(v0: i16):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; packw a0,a0,zero
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x3b, 0x45, 0x05, 0x08
; ret
function %uextend32_64(i32) -> i64 {
block0(v0: i32):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; pack a0,a0,zero
; ret
;
; Disassembled:
; block0: ; offset 0x0
; .byte 0x33, 0x45, 0x05, 0x08
; ret

View File

@@ -0,0 +1,260 @@
test compile precise-output
set unwind_info=false
target riscv64
;;;; Uextend rules
function %uextend8_16(i8) -> i16 {
block0(v0: i8):
v1 = uextend.i16 v0
return v1
}
; VCode:
; block0:
; andi a0,a0,255
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %uextend8_32(i8) -> i32 {
block0(v0: i8):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; andi a0,a0,255
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %uextend16_32(i16) -> i32 {
block0(v0: i16):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srli a0,t2,48
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srli a0, t2, 0x30
; ret
function %uextend8_64(i8) -> i64 {
block0(v0: i8):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; andi a0,a0,255
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %uextend16_64(i16) -> i64 {
block0(v0: i16):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srli a0,t2,48
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srli a0, t2, 0x30
; ret
function %uextend32_64(i32) -> i64 {
block0(v0: i32):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,32
; srli a0,t2,32
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srli a0, t2, 0x20
; ret
;;;; Sextend Rules
function %sextend8_16(i8) -> i16 {
block0(v0: i8):
v1 = sextend.i16 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,56
; srai a0,t2,56
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai a0, t2, 0x38
; ret
function %sextend8_32(i8) -> i32 {
block0(v0: i8):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,56
; srai a0,t2,56
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai a0, t2, 0x38
; ret
function %sextend16_32(i16) -> i32 {
block0(v0: i16):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srai a0,t2,48
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srai a0, t2, 0x30
; ret
function %sextend8_64(i8) -> i64 {
block0(v0: i8):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,56
; srai a0,t2,56
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai a0, t2, 0x38
; ret
function %sextend16_64(i16) -> i64 {
block0(v0: i16):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; slli t2,a0,48
; srai a0,t2,48
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srai a0, t2, 0x30
; ret
function %sextend32_64(i32) -> i64 {
block0(v0: i32):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.w a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sext.w a0, a0
; ret
function %f(i8) -> i64 {
block0(v0: i8):
v1 = sextend.i64 v0
v2 = iconst.i64 42
v3 = iadd.i64 v2, v1
return v3
}
; VCode:
; block0:
; slli a0,a0,56
; srai a2,a0,56
; addi a0,a2,42
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a2, a0, 0x38
; addi a0, a2, 0x2a
; ret
function %f2(i8, i64) -> i64 {
block0(v0: i8, v1: i64):
v2 = sextend.i64 v0
v3 = iadd.i64 v2, v1
return v3
}
; VCode:
; block0:
; slli a2,a0,56
; srai a3,a2,56
; add a0,a3,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a2, a0, 0x38
; srai a3, a2, 0x38
; add a0, a3, a1
; ret

View File

@@ -150,7 +150,7 @@ block0(v0: i32):
; VCode:
; block0:
; addiw t2,a0,0
; sext.w t2,a0
; li a1,-1
; select_reg a1,zero,a1##condition=(zero eq t2)
; mv a0,a1

View File

@@ -16,8 +16,7 @@ block0(v0: i8):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai t2, t2, 0x38
; .byte 0x93, 0x13, 0x45, 0x60
; neg a1, t2
; .byte 0x33, 0xe5, 0xb3, 0x0a
; ret
@@ -37,8 +36,7 @@ block0(v0: i16):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srai t2, t2, 0x30
; .byte 0x93, 0x13, 0x55, 0x60
; neg a1, t2
; .byte 0x33, 0xe5, 0xb3, 0x0a
; ret
@@ -58,8 +56,7 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srai t2, t2, 0x20
; sext.w t2, a0
; neg a1, t2
; .byte 0x33, 0xe5, 0xb3, 0x0a
; ret

View File

@@ -9,20 +9,21 @@ block0(v0: i8):
; VCode:
; block0:
; sext.b t2,a0
; sub a1,zero,t2
; select_reg a0,t2,a1##condition=(t2 sgt a1)
; slli t2,a0,56
; srai a1,t2,56
; sub a3,zero,a1
; select_reg a0,a1,a3##condition=(a1 sgt a3)
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x38
; srai t2, t2, 0x38
; neg a1, t2
; blt a1, t2, 0xc
; ori a0, a1, 0
; srai a1, t2, 0x38
; neg a3, a1
; blt a3, a1, 0xc
; ori a0, a3, 0
; j 8
; ori a0, t2, 0
; ori a0, a1, 0
; ret
function %iabs_i16(i16) -> i16 {
@@ -33,20 +34,21 @@ block0(v0: i16):
; VCode:
; block0:
; sext.h t2,a0
; sub a1,zero,t2
; select_reg a0,t2,a1##condition=(t2 sgt a1)
; slli t2,a0,48
; srai a1,t2,48
; sub a3,zero,a1
; select_reg a0,a1,a3##condition=(a1 sgt a3)
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srai t2, t2, 0x30
; neg a1, t2
; blt a1, t2, 0xc
; ori a0, a1, 0
; srai a1, t2, 0x30
; neg a3, a1
; blt a3, a1, 0xc
; ori a0, a3, 0
; j 8
; ori a0, t2, 0
; ori a0, a1, 0
; ret
function %iabs_i32(i32) -> i32 {
@@ -64,8 +66,7 @@ block0(v0: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srai t2, t2, 0x20
; sext.w t2, a0
; neg a1, t2
; blt a1, t2, 0xc
; ori a0, a1, 0

View File

@@ -16,9 +16,11 @@ block0:
; addi t1,t1,3532
; lui a2,14
; addi a2,a2,3532
; uext.h a5,t1
; uext.h a7,a2
; ne a0,a5,a7##ty=i16
; slli a5,t1,48
; srli a7,a5,48
; slli t4,a2,48
; srli t1,t4,48
; ne a0,a7,t1##ty=i16
; ret
;
; Disassembled:
@@ -28,10 +30,10 @@ block0:
; lui a2, 0xe
; addi a2, a2, -0x234
; slli a5, t1, 0x30
; srli a5, a5, 0x30
; slli a7, a2, 0x30
; srli a7, a7, 0x30
; beq a5, a7, 0xc
; srli a7, a5, 0x30
; slli t4, a2, 0x30
; srli t1, t4, 0x30
; beq a7, t1, 0xc
; addi a0, zero, 1
; j 8
; mv a0, zero

View File

@@ -59,15 +59,16 @@ block0(v0: i32, v1: i8):
; VCode:
; block0:
; sext.b a1,a1
; addw a0,a0,a1
; slli a1,a1,56
; srai a3,a1,56
; addw a0,a0,a3
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a1, a1, 0x38
; srai a1, a1, 0x38
; addw a0, a0, a1
; srai a3, a1, 0x38
; addw a0, a0, a3
; ret
function %add64_32(i64, i32) -> i64 {
@@ -85,8 +86,7 @@ block0(v0: i64, v1: i32):
;
; Disassembled:
; block0: ; offset 0x0
; slli a1, a1, 0x20
; srai a1, a1, 0x20
; sext.w a1, a1
; add a0, a0, a1
; ret

View File

@@ -105,30 +105,31 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; uext.w a0,a0
; andi a2,a1,31
; li a4,32
; sub a6,a4,a2
; srl t3,a0,a2
; sll t0,a0,a6
; select_reg t2,zero,t0##condition=(a2 eq zero)
; or a0,t3,t2
; slli a0,a0,32
; srli a2,a0,32
; andi a4,a1,31
; li a6,32
; sub t3,a6,a4
; srl t0,a2,a4
; sll t2,a2,t3
; select_reg a1,zero,t2##condition=(a4 eq zero)
; or a0,t0,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srli a0, a0, 0x20
; andi a2, a1, 0x1f
; addi a4, zero, 0x20
; sub a6, a4, a2
; srl t3, a0, a2
; sll t0, a0, a6
; beqz a2, 0xc
; ori t2, t0, 0
; srli a2, a0, 0x20
; andi a4, a1, 0x1f
; addi a6, zero, 0x20
; sub t3, a6, a4
; srl t0, a2, a4
; sll t2, a2, t3
; beqz a4, 0xc
; ori a1, t2, 0
; j 8
; ori t2, zero, 0
; or a0, t3, t2
; ori a1, zero, 0
; or a0, t0, a1
; ret
function %f2(i16, i16) -> i16 {
@@ -139,30 +140,31 @@ block0(v0: i16, v1: i16):
; VCode:
; block0:
; uext.h a0,a0
; andi a2,a1,15
; li a4,16
; sub a6,a4,a2
; srl t3,a0,a2
; sll t0,a0,a6
; select_reg t2,zero,t0##condition=(a2 eq zero)
; or a0,t3,t2
; slli a0,a0,48
; srli a2,a0,48
; andi a4,a1,15
; li a6,16
; sub t3,a6,a4
; srl t0,a2,a4
; sll t2,a2,t3
; select_reg a1,zero,t2##condition=(a4 eq zero)
; or a0,t0,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; andi a2, a1, 0xf
; addi a4, zero, 0x10
; sub a6, a4, a2
; srl t3, a0, a2
; sll t0, a0, a6
; beqz a2, 0xc
; ori t2, t0, 0
; srli a2, a0, 0x30
; andi a4, a1, 0xf
; addi a6, zero, 0x10
; sub t3, a6, a4
; srl t0, a2, a4
; sll t2, a2, t3
; beqz a4, 0xc
; ori a1, t2, 0
; j 8
; ori t2, zero, 0
; or a0, t3, t2
; ori a1, zero, 0
; or a0, t0, a1
; ret
function %f3(i8, i8) -> i8 {
@@ -173,7 +175,7 @@ block0(v0: i8, v1: i8):
; VCode:
; block0:
; uext.b a0,a0
; andi a0,a0,255
; andi a2,a1,7
; li a4,8
; sub a6,a4,a2
@@ -297,30 +299,31 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; uext.w a0,a0
; andi a2,a1,31
; li a4,32
; sub a6,a4,a2
; sll t3,a0,a2
; srl t0,a0,a6
; select_reg t2,zero,t0##condition=(a2 eq zero)
; or a0,t3,t2
; slli a0,a0,32
; srli a2,a0,32
; andi a4,a1,31
; li a6,32
; sub t3,a6,a4
; sll t0,a2,a4
; srl t2,a2,t3
; select_reg a1,zero,t2##condition=(a4 eq zero)
; or a0,t0,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srli a0, a0, 0x20
; andi a2, a1, 0x1f
; addi a4, zero, 0x20
; sub a6, a4, a2
; sll t3, a0, a2
; srl t0, a0, a6
; beqz a2, 0xc
; ori t2, t0, 0
; srli a2, a0, 0x20
; andi a4, a1, 0x1f
; addi a6, zero, 0x20
; sub t3, a6, a4
; sll t0, a2, a4
; srl t2, a2, t3
; beqz a4, 0xc
; ori a1, t2, 0
; j 8
; ori t2, zero, 0
; or a0, t3, t2
; ori a1, zero, 0
; or a0, t0, a1
; ret
function %f6(i16, i16) -> i16 {
@@ -331,30 +334,31 @@ block0(v0: i16, v1: i16):
; VCode:
; block0:
; uext.h a0,a0
; andi a2,a1,15
; li a4,16
; sub a6,a4,a2
; sll t3,a0,a2
; srl t0,a0,a6
; select_reg t2,zero,t0##condition=(a2 eq zero)
; or a0,t3,t2
; slli a0,a0,48
; srli a2,a0,48
; andi a4,a1,15
; li a6,16
; sub t3,a6,a4
; sll t0,a2,a4
; srl t2,a2,t3
; select_reg a1,zero,t2##condition=(a4 eq zero)
; or a0,t0,a1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; andi a2, a1, 0xf
; addi a4, zero, 0x10
; sub a6, a4, a2
; sll t3, a0, a2
; srl t0, a0, a6
; beqz a2, 0xc
; ori t2, t0, 0
; srli a2, a0, 0x30
; andi a4, a1, 0xf
; addi a6, zero, 0x10
; sub t3, a6, a4
; sll t0, a2, a4
; srl t2, a2, t3
; beqz a4, 0xc
; ori a1, t2, 0
; j 8
; ori t2, zero, 0
; or a0, t3, t2
; ori a1, zero, 0
; or a0, t0, a1
; ret
function %f7(i8, i8) -> i8 {
@@ -365,7 +369,7 @@ block0(v0: i8, v1: i8):
; VCode:
; block0:
; uext.b a0,a0
; andi a0,a0,255
; andi a2,a1,7
; li a4,8
; sub a6,a4,a2
@@ -430,17 +434,18 @@ block0(v0: i16, v1: i16):
; VCode:
; block0:
; uext.h a0,a0
; andi a2,a1,15
; srlw a0,a0,a2
; slli a0,a0,48
; srli a2,a0,48
; andi a4,a1,15
; srlw a0,a2,a4
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; andi a2, a1, 0xf
; srlw a0, a0, a2
; srli a2, a0, 0x30
; andi a4, a1, 0xf
; srlw a0, a2, a4
; ret
function %f11(i8, i8) -> i8 {
@@ -451,7 +456,7 @@ block0(v0: i8, v1: i8):
; VCode:
; block0:
; uext.b a0,a0
; andi a0,a0,255
; andi a2,a1,7
; srlw a0,a0,a2
; ret
@@ -571,17 +576,18 @@ block0(v0: i16, v1: i16):
; VCode:
; block0:
; sext.h a0,a0
; andi a2,a1,15
; sra a0,a0,a2
; slli a0,a0,48
; srai a2,a0,48
; andi a4,a1,15
; sra a0,a2,a4
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srai a0, a0, 0x30
; andi a2, a1, 0xf
; sra a0, a0, a2
; srai a2, a0, 0x30
; andi a4, a1, 0xf
; sra a0, a2, a4
; ret
function %f19(i8, i8) -> i8 {
@@ -592,17 +598,18 @@ block0(v0: i8, v1: i8):
; VCode:
; block0:
; sext.b a0,a0
; andi a2,a1,7
; sra a0,a0,a2
; slli a0,a0,56
; srai a2,a0,56
; andi a4,a1,7
; sra a0,a2,a4
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; andi a2, a1, 7
; sra a0, a0, a2
; srai a2, a0, 0x38
; andi a4, a1, 7
; sra a0, a2, a4
; ret
function %f20(i64) -> i64 {
@@ -682,32 +689,33 @@ block0(v0: i32):
; VCode:
; block0:
; uext.w t2,a0
; li a1,17
; andi a3,a1,31
; li a5,32
; sub a7,a5,a3
; sll t4,t2,a3
; srl t1,t2,a7
; select_reg a0,zero,t1##condition=(a3 eq zero)
; or a0,t4,a0
; slli t2,a0,32
; srli a1,t2,32
; li a3,17
; andi a5,a3,31
; li a7,32
; sub t4,a7,a5
; sll t1,a1,a5
; srl a0,a1,t4
; select_reg a2,zero,a0##condition=(a5 eq zero)
; or a0,t1,a2
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x20
; srli t2, t2, 0x20
; addi a1, zero, 0x11
; andi a3, a1, 0x1f
; addi a5, zero, 0x20
; sub a7, a5, a3
; sll t4, t2, a3
; srl t1, t2, a7
; beqz a3, 0xc
; ori a0, t1, 0
; srli a1, t2, 0x20
; addi a3, zero, 0x11
; andi a5, a3, 0x1f
; addi a7, zero, 0x20
; sub t4, a7, a5
; sll t1, a1, a5
; srl a0, a1, t4
; beqz a5, 0xc
; ori a2, a0, 0
; j 8
; ori a0, zero, 0
; or a0, t4, a0
; ori a2, zero, 0
; or a0, t1, a2
; ret
function %f23(i16) -> i16 {
@@ -719,32 +727,33 @@ block0(v0: i16):
; VCode:
; block0:
; uext.h t2,a0
; li a1,10
; andi a3,a1,15
; li a5,16
; sub a7,a5,a3
; sll t4,t2,a3
; srl t1,t2,a7
; select_reg a0,zero,t1##condition=(a3 eq zero)
; or a0,t4,a0
; slli t2,a0,48
; srli a1,t2,48
; li a3,10
; andi a5,a3,15
; li a7,16
; sub t4,a7,a5
; sll t1,a1,a5
; srl a0,a1,t4
; select_reg a2,zero,a0##condition=(a5 eq zero)
; or a0,t1,a2
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli t2, a0, 0x30
; srli t2, t2, 0x30
; addi a1, zero, 0xa
; andi a3, a1, 0xf
; addi a5, zero, 0x10
; sub a7, a5, a3
; sll t4, t2, a3
; srl t1, t2, a7
; beqz a3, 0xc
; ori a0, t1, 0
; srli a1, t2, 0x30
; addi a3, zero, 0xa
; andi a5, a3, 0xf
; addi a7, zero, 0x10
; sub t4, a7, a5
; sll t1, a1, a5
; srl a0, a1, t4
; beqz a5, 0xc
; ori a2, a0, 0
; j 8
; ori a0, zero, 0
; or a0, t4, a0
; ori a2, zero, 0
; or a0, t1, a2
; ret
function %f24(i8) -> i8 {
@@ -756,7 +765,7 @@ block0(v0: i8):
; VCode:
; block0:
; uext.b t2,a0
; andi t2,a0,255
; li a1,3
; andi a3,a1,7
; li a5,8

View File

@@ -11,23 +11,25 @@ block0(v0: i32):
; VCode:
; block0:
; li t2,127
; uext.w a1,a0
; uext.w a3,t2
; add a0,a1,a3
; srli a7,a0,32
; trap_if a7,user0
; slli a1,a0,32
; srli a3,a1,32
; slli a5,t2,32
; srli a7,a5,32
; add a0,a3,a7
; srli t1,a0,32
; trap_if t1,user0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; addi t2, zero, 0x7f
; slli a1, a0, 0x20
; srli a1, a1, 0x20
; slli a3, t2, 0x20
; srli a3, a3, 0x20
; add a0, a1, a3
; srli a7, a0, 0x20
; beqz a7, 8
; srli a3, a1, 0x20
; slli a5, t2, 0x20
; srli a7, a5, 0x20
; add a0, a3, a7
; srli t1, a0, 0x20
; beqz t1, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: user0
; ret
@@ -41,23 +43,25 @@ block0(v0: i32):
; VCode:
; block0:
; li t2,127
; uext.w a1,t2
; uext.w a3,a0
; add a0,a1,a3
; srli a7,a0,32
; trap_if a7,user0
; slli a1,t2,32
; srli a3,a1,32
; slli a5,a0,32
; srli a7,a5,32
; add a0,a3,a7
; srli t1,a0,32
; trap_if t1,user0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; addi t2, zero, 0x7f
; slli a1, t2, 0x20
; srli a1, a1, 0x20
; slli a3, a0, 0x20
; srli a3, a3, 0x20
; add a0, a1, a3
; srli a7, a0, 0x20
; beqz a7, 8
; srli a3, a1, 0x20
; slli a5, a0, 0x20
; srli a7, a5, 0x20
; add a0, a3, a7
; srli t1, a0, 0x20
; beqz t1, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: user0
; ret
@@ -69,22 +73,24 @@ block0(v0: i32, v1: i32):
; VCode:
; block0:
; uext.w a0,a0
; uext.w a2,a1
; add a0,a0,a2
; srli a6,a0,32
; trap_if a6,user0
; slli a0,a0,32
; srli a2,a0,32
; slli a4,a1,32
; srli a6,a4,32
; add a0,a2,a6
; srli t0,a0,32
; trap_if t0,user0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srli a0, a0, 0x20
; slli a2, a1, 0x20
; srli a2, a2, 0x20
; add a0, a0, a2
; srli a6, a0, 0x20
; beqz a6, 8
; srli a2, a0, 0x20
; slli a4, a1, 0x20
; srli a6, a4, 0x20
; add a0, a2, a6
; srli t0, a0, 0x20
; beqz t0, 8
; .byte 0x00, 0x00, 0x00, 0x00 ; trap: user0
; ret

View File

@@ -1,205 +0,0 @@
test compile precise-output
set unwind_info=false
target riscv64
function %f_u_8_64(i8) -> i64 {
block0(v0: i8):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; uext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %f_u_8_32(i8) -> i32 {
block0(v0: i8):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; uext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %f_u_8_16(i8) -> i16 {
block0(v0: i8):
v1 = uextend.i16 v0
return v1
}
; VCode:
; block0:
; uext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; andi a0, a0, 0xff
; ret
function %f_s_8_64(i8) -> i64 {
block0(v0: i8):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; ret
function %f_s_8_32(i8) -> i32 {
block0(v0: i8):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; ret
function %f_s_8_16(i8) -> i16 {
block0(v0: i8):
v1 = sextend.i16 v0
return v1
}
; VCode:
; block0:
; sext.b a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x38
; srai a0, a0, 0x38
; ret
function %f_u_16_64(i16) -> i64 {
block0(v0: i16):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; uext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; ret
function %f_u_16_32(i16) -> i32 {
block0(v0: i16):
v1 = uextend.i32 v0
return v1
}
; VCode:
; block0:
; uext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srli a0, a0, 0x30
; ret
function %f_s_16_64(i16) -> i64 {
block0(v0: i16):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srai a0, a0, 0x30
; ret
function %f_s_16_32(i16) -> i32 {
block0(v0: i16):
v1 = sextend.i32 v0
return v1
}
; VCode:
; block0:
; sext.h a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x30
; srai a0, a0, 0x30
; ret
function %f_u_32_64(i32) -> i64 {
block0(v0: i32):
v1 = uextend.i64 v0
return v1
}
; VCode:
; block0:
; uext.w a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srli a0, a0, 0x20
; ret
function %f_s_32_64(i32) -> i64 {
block0(v0: i32):
v1 = sextend.i64 v0
return v1
}
; VCode:
; block0:
; sext.w a0,a0
; ret
;
; Disassembled:
; block0: ; offset 0x0
; slli a0, a0, 0x20
; srai a0, a0, 0x20
; ret

View File

@@ -41,15 +41,16 @@
;; function u0:0:
;; block0:
;; uext.w a6,a0
;; slli a6,a0,32
;; srli t3,a6,32
;; ld a7,8(a2)
;; addi a7,a7,-4
;; ugt a7,a6,a7##ty=i64
;; ugt a7,t3,a7##ty=i64
;; bne a7,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a2)
;; add t3,t3,a6
;; sw a1,0(t3)
;; ld t4,0(a2)
;; add t4,t4,t3
;; sw a1,0(t4)
;; j label3
;; block3:
;; ret
@@ -58,15 +59,16 @@
;;
;; function u0:1:
;; block0:
;; uext.w a6,a0
;; slli a6,a0,32
;; srli t3,a6,32
;; ld a7,8(a1)
;; addi a7,a7,-4
;; ugt a7,a6,a7##ty=i64
;; ugt a7,t3,a7##ty=i64
;; bne a7,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a1)
;; add t3,t3,a6
;; lw a0,0(t3)
;; ld t4,0(a1)
;; add t4,t4,t3
;; lw a0,0(t4)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a2)
;; lui t4,1048575
;; addi t4,t4,4092
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4092
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a2)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; sw a1,0(a0)
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t2,1
;; add a2,a0,t2
;; sw a1,0(a2)
;; j label3
;; block3:
;; ret
@@ -62,19 +63,20 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a1)
;; lui t4,1048575
;; addi t4,t4,4092
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4092
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a1)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; lw a0,0(a0)
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t2,1
;; add a1,a0,t2
;; lw a0,0(a1)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0004
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a2)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0004
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a2)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a2)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a2,a0,t2
;; ld a2,0(a2)
;; add a2,a2,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a2,a0
;; sw a1,0(a2)
;; j label3
;; block3:
@@ -63,20 +64,21 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0004
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a1)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0004
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a1)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a1)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a1,a0,t2
;; lw a0,0(a1)
;; ld a1,0(a1)
;; add a1,a1,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a1,a0
;; lw a0,0(a2)
;; j label3
;; block3:
;; ret

View File

@@ -41,14 +41,15 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,8(a2)
;; uge a6,a5,a6##ty=i64
;; uge a6,a7,a6##ty=i64
;; bne a6,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a7,0(a2)
;; add a7,a7,a5
;; sb a1,0(a7)
;; ld t3,0(a2)
;; add t3,t3,a7
;; sb a1,0(t3)
;; j label3
;; block3:
;; ret
@@ -57,14 +58,15 @@
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,8(a1)
;; uge a6,a5,a6##ty=i64
;; uge a6,a7,a6##ty=i64
;; bne a6,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a7,0(a1)
;; add a7,a7,a5
;; lbu a0,0(a7)
;; ld t3,0(a1)
;; add t3,t3,a7
;; lbu a0,0(t3)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a2)
;; lui t4,1048575
;; addi t4,t4,4095
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4095
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a2)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; sb a1,0(a0)
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t2,1
;; add a2,a0,t2
;; sb a1,0(a2)
;; j label3
;; block3:
;; ret
@@ -62,19 +63,20 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a1)
;; lui t4,1048575
;; addi t4,t4,4095
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4095
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a1)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; lbu a0,0(a0)
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t2,1
;; add a1,a0,t2
;; lbu a0,0(a1)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0001
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a2)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0001
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a2)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a2)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a2,a0,t2
;; ld a2,0(a2)
;; add a2,a2,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a2,a0
;; sb a1,0(a2)
;; j label3
;; block3:
@@ -63,20 +64,21 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0001
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a1)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0001
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a1)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a1)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a1,a0,t2
;; lbu a0,0(a1)
;; ld a1,0(a1)
;; add a1,a1,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a1,a0
;; lbu a0,0(a2)
;; j label3
;; block3:
;; ret

View File

@@ -41,30 +41,32 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,8(a2)
;; addi t4,t4,-4
;; ld t0,0(a2)
;; add t0,t0,t3
;; ugt a7,t3,t4##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; sw a1,0(t3)
;; ld t1,0(a2)
;; add t1,t1,t0
;; ugt t3,t0,t4##ty=i64
;; li t0,0
;; selectif_spectre_guard t4,t0,t1##test=t3
;; sw a1,0(t4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,8(a1)
;; addi t4,t4,-4
;; ld t0,0(a1)
;; add t0,t0,t3
;; ugt a7,t3,t4##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; lw a0,0(t3)
;; ld t1,0(a1)
;; add t1,t1,t0
;; ugt t3,t0,t4##ty=i64
;; li t0,0
;; selectif_spectre_guard t4,t0,t1##test=t3
;; lw a0,0(t4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,38 +41,40 @@
;; function u0:0:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a3,t2,32
;; ld a0,8(a2)
;; lui t1,1048575
;; addi t1,t1,4092
;; add a3,a0,t1
;; lui t2,1048575
;; addi t2,t2,4092
;; add a4,a0,t2
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard t2,a2,a0##test=t1
;; sw a1,0(t2)
;; add a0,a0,a3
;; lui t2,1
;; add a2,a0,t2
;; ugt t2,a3,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sw a1,0(a0)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a2,t2,32
;; ld a0,8(a1)
;; lui t1,1048575
;; addi t1,t1,4092
;; add a2,a0,t1
;; lui t2,1048575
;; addi t2,t2,4092
;; add a3,a0,t2
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a2##ty=i64
;; li a1,0
;; selectif_spectre_guard t2,a1,a0##test=t1
;; lw a0,0(t2)
;; add a0,a0,a2
;; lui t2,1
;; add a1,a0,t2
;; ugt t2,a2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lw a0,0(a0)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,40 +41,42 @@
;; function u0:0:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0004
;; add t2,a0,t0
;; ult a3,t2,a0##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a2)
;; slli t2,a0,32
;; srli a3,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0004
;; add a0,a3,t1
;; ult a4,a0,a3##ty=i64
;; trap_if a4,heap_oob
;; ld a4,8(a2)
;; ld a2,0(a2)
;; add a0,a2,a0
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a0,a2
;; ugt t2,t2,a3##ty=i64
;; add a2,a2,a3
;; auipc a3,0; ld a3,12(a3); j 12; .8byte 0xffff0000
;; add a2,a2,a3
;; ugt a0,a0,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sw a1,0(a0)
;; selectif_spectre_guard a4,a3,a2##test=a0
;; sw a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0004
;; add t2,a0,t0
;; ult a2,t2,a0##ty=i64
;; trap_if a2,heap_oob
;; ld a2,8(a1)
;; slli t2,a0,32
;; srli a2,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0004
;; add a0,a2,t1
;; ult a3,a0,a2##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a1)
;; ld a1,0(a1)
;; add a0,a1,a0
;; auipc a1,0; ld a1,12(a1); j 12; .8byte 0xffff0000
;; add a1,a0,a1
;; ugt t2,t2,a2##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lw a0,0(a0)
;; add a1,a1,a2
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a1,a2
;; ugt a0,a0,a3##ty=i64
;; li a3,0
;; selectif_spectre_guard a1,a3,a2##test=a0
;; lw a0,0(a1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,28 +41,30 @@
;; function u0:0:
;; block0:
;; uext.w a7,a0
;; slli a7,a0,32
;; srli t4,a7,32
;; ld t3,8(a2)
;; ld t4,0(a2)
;; add t4,t4,a7
;; uge a6,a7,t3##ty=i64
;; li t3,0
;; selectif_spectre_guard a7,t3,t4##test=a6
;; sb a1,0(a7)
;; ld t0,0(a2)
;; add t0,t0,t4
;; uge a7,t4,t3##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; sb a1,0(t3)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a7,a0
;; slli a7,a0,32
;; srli t4,a7,32
;; ld t3,8(a1)
;; ld t4,0(a1)
;; add t4,t4,a7
;; uge a6,a7,t3##ty=i64
;; li t3,0
;; selectif_spectre_guard a7,t3,t4##test=a6
;; lbu a0,0(a7)
;; ld t0,0(a1)
;; add t0,t0,t4
;; uge a7,t4,t3##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; lbu a0,0(t3)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,38 +41,40 @@
;; function u0:0:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a3,t2,32
;; ld a0,8(a2)
;; lui t1,1048575
;; addi t1,t1,4095
;; add a3,a0,t1
;; lui t2,1048575
;; addi t2,t2,4095
;; add a4,a0,t2
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard t2,a2,a0##test=t1
;; sb a1,0(t2)
;; add a0,a0,a3
;; lui t2,1
;; add a2,a0,t2
;; ugt t2,a3,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sb a1,0(a0)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a2,t2,32
;; ld a0,8(a1)
;; lui t1,1048575
;; addi t1,t1,4095
;; add a2,a0,t1
;; lui t2,1048575
;; addi t2,t2,4095
;; add a3,a0,t2
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a2##ty=i64
;; li a1,0
;; selectif_spectre_guard t2,a1,a0##test=t1
;; lbu a0,0(t2)
;; add a0,a0,a2
;; lui t2,1
;; add a1,a0,t2
;; ugt t2,a2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lbu a0,0(a0)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,40 +41,42 @@
;; function u0:0:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0001
;; add t2,a0,t0
;; ult a3,t2,a0##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a2)
;; slli t2,a0,32
;; srli a3,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0001
;; add a0,a3,t1
;; ult a4,a0,a3##ty=i64
;; trap_if a4,heap_oob
;; ld a4,8(a2)
;; ld a2,0(a2)
;; add a0,a2,a0
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a0,a2
;; ugt t2,t2,a3##ty=i64
;; add a2,a2,a3
;; auipc a3,0; ld a3,12(a3); j 12; .8byte 0xffff0000
;; add a2,a2,a3
;; ugt a0,a0,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sb a1,0(a0)
;; selectif_spectre_guard a4,a3,a2##test=a0
;; sb a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0001
;; add t2,a0,t0
;; ult a2,t2,a0##ty=i64
;; trap_if a2,heap_oob
;; ld a2,8(a1)
;; slli t2,a0,32
;; srli a2,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0001
;; add a0,a2,t1
;; ult a3,a0,a2##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a1)
;; ld a1,0(a1)
;; add a0,a1,a0
;; auipc a1,0; ld a1,12(a1); j 12; .8byte 0xffff0000
;; add a1,a0,a1
;; ugt t2,t2,a2##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lbu a0,0(a0)
;; add a1,a1,a2
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a1,a2
;; ugt a0,a0,a3##ty=i64
;; li a3,0
;; selectif_spectre_guard a1,a3,a2##test=a0
;; lbu a0,0(a1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,15 +41,16 @@
;; function u0:0:
;; block0:
;; uext.w a6,a0
;; slli a6,a0,32
;; srli t3,a6,32
;; ld a7,8(a2)
;; addi a7,a7,-4
;; ugt a7,a6,a7##ty=i64
;; ugt a7,t3,a7##ty=i64
;; bne a7,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a2)
;; add t3,t3,a6
;; sw a1,0(t3)
;; ld t4,0(a2)
;; add t4,t4,t3
;; sw a1,0(t4)
;; j label3
;; block3:
;; ret
@@ -58,15 +59,16 @@
;;
;; function u0:1:
;; block0:
;; uext.w a6,a0
;; slli a6,a0,32
;; srli t3,a6,32
;; ld a7,8(a1)
;; addi a7,a7,-4
;; ugt a7,a6,a7##ty=i64
;; ugt a7,t3,a7##ty=i64
;; bne a7,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a1)
;; add t3,t3,a6
;; lw a0,0(t3)
;; ld t4,0(a1)
;; add t4,t4,t3
;; lw a0,0(t4)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a2)
;; lui t4,1048575
;; addi t4,t4,4092
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4092
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a2)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; sw a1,0(a0)
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t2,1
;; add a2,a0,t2
;; sw a1,0(a2)
;; j label3
;; block3:
;; ret
@@ -62,19 +63,20 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a1)
;; lui t4,1048575
;; addi t4,t4,4092
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4092
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a1)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; lw a0,0(a0)
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t2,1
;; add a1,a0,t2
;; lw a0,0(a1)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0004
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a2)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0004
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a2)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a2)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a2,a0,t2
;; ld a2,0(a2)
;; add a2,a2,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a2,a0
;; sw a1,0(a2)
;; j label3
;; block3:
@@ -63,20 +64,21 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0004
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a1)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0004
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a1)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a1)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a1,a0,t2
;; lw a0,0(a1)
;; ld a1,0(a1)
;; add a1,a1,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a1,a0
;; lw a0,0(a2)
;; j label3
;; block3:
;; ret

View File

@@ -41,14 +41,15 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,8(a2)
;; uge a6,a5,a6##ty=i64
;; uge a6,a7,a6##ty=i64
;; bne a6,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a7,0(a2)
;; add a7,a7,a5
;; sb a1,0(a7)
;; ld t3,0(a2)
;; add t3,t3,a7
;; sb a1,0(t3)
;; j label3
;; block3:
;; ret
@@ -57,14 +58,15 @@
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,8(a1)
;; uge a6,a5,a6##ty=i64
;; uge a6,a7,a6##ty=i64
;; bne a6,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a7,0(a1)
;; add a7,a7,a5
;; lbu a0,0(a7)
;; ld t3,0(a1)
;; add t3,t3,a7
;; lbu a0,0(t3)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a2)
;; lui t4,1048575
;; addi t4,t4,4095
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4095
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a2)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; sb a1,0(a0)
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t2,1
;; add a2,a0,t2
;; sb a1,0(a2)
;; j label3
;; block3:
;; ret
@@ -62,19 +63,20 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,8(a1)
;; lui t4,1048575
;; addi t4,t4,4095
;; add t2,t1,t4
;; ugt t1,t0,t2##ty=i64
;; lui t0,1048575
;; addi t0,t0,4095
;; add a0,t1,t0
;; ugt t1,t2,a0##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t2,0(a1)
;; add t2,t2,t0
;; lui t1,1
;; add a0,t2,t1
;; lbu a0,0(a0)
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t2,1
;; add a1,a0,t2
;; lbu a0,0(a1)
;; j label3
;; block3:
;; ret

View File

@@ -41,19 +41,20 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0001
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a2)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0001
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a2)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a2)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a2,a0,t2
;; ld a2,0(a2)
;; add a2,a2,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a2,a0
;; sb a1,0(a2)
;; j label3
;; block3:
@@ -63,20 +64,21 @@
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; auipc t3,0; ld t3,12(t3); j 12; .8byte 0xffff0001
;; add t1,t0,t3
;; ult t2,t1,t0##ty=i64
;; trap_if t2,heap_oob
;; ld t2,8(a1)
;; ugt t1,t1,t2##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; slli t0,a0,32
;; srli t2,t0,32
;; auipc t4,0; ld t4,12(t4); j 12; .8byte 0xffff0001
;; add t1,t2,t4
;; ult a0,t1,t2##ty=i64
;; trap_if a0,heap_oob
;; ld a0,8(a1)
;; ugt a0,t1,a0##ty=i64
;; bne a0,zero,taken(label1),not_taken(label2)
;; block2:
;; ld a0,0(a1)
;; add a0,a0,t0
;; auipc t2,0; ld t2,12(t2); j 12; .8byte 0xffff0000
;; add a1,a0,t2
;; lbu a0,0(a1)
;; ld a1,0(a1)
;; add a1,a1,t2
;; auipc a0,0; ld a0,12(a0); j 12; .8byte 0xffff0000
;; add a2,a1,a0
;; lbu a0,0(a2)
;; j label3
;; block3:
;; ret

View File

@@ -41,30 +41,32 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,8(a2)
;; addi t4,t4,-4
;; ld t0,0(a2)
;; add t0,t0,t3
;; ugt a7,t3,t4##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; sw a1,0(t3)
;; ld t1,0(a2)
;; add t1,t1,t0
;; ugt t3,t0,t4##ty=i64
;; li t0,0
;; selectif_spectre_guard t4,t0,t1##test=t3
;; sw a1,0(t4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,8(a1)
;; addi t4,t4,-4
;; ld t0,0(a1)
;; add t0,t0,t3
;; ugt a7,t3,t4##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; lw a0,0(t3)
;; ld t1,0(a1)
;; add t1,t1,t0
;; ugt t3,t0,t4##ty=i64
;; li t0,0
;; selectif_spectre_guard t4,t0,t1##test=t3
;; lw a0,0(t4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,38 +41,40 @@
;; function u0:0:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a3,t2,32
;; ld a0,8(a2)
;; lui t1,1048575
;; addi t1,t1,4092
;; add a3,a0,t1
;; lui t2,1048575
;; addi t2,t2,4092
;; add a4,a0,t2
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard t2,a2,a0##test=t1
;; sw a1,0(t2)
;; add a0,a0,a3
;; lui t2,1
;; add a2,a0,t2
;; ugt t2,a3,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sw a1,0(a0)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a2,t2,32
;; ld a0,8(a1)
;; lui t1,1048575
;; addi t1,t1,4092
;; add a2,a0,t1
;; lui t2,1048575
;; addi t2,t2,4092
;; add a3,a0,t2
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a2##ty=i64
;; li a1,0
;; selectif_spectre_guard t2,a1,a0##test=t1
;; lw a0,0(t2)
;; add a0,a0,a2
;; lui t2,1
;; add a1,a0,t2
;; ugt t2,a2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lw a0,0(a0)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,40 +41,42 @@
;; function u0:0:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0004
;; add t2,a0,t0
;; ult a3,t2,a0##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a2)
;; slli t2,a0,32
;; srli a3,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0004
;; add a0,a3,t1
;; ult a4,a0,a3##ty=i64
;; trap_if a4,heap_oob
;; ld a4,8(a2)
;; ld a2,0(a2)
;; add a0,a2,a0
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a0,a2
;; ugt t2,t2,a3##ty=i64
;; add a2,a2,a3
;; auipc a3,0; ld a3,12(a3); j 12; .8byte 0xffff0000
;; add a2,a2,a3
;; ugt a0,a0,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sw a1,0(a0)
;; selectif_spectre_guard a4,a3,a2##test=a0
;; sw a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0004
;; add t2,a0,t0
;; ult a2,t2,a0##ty=i64
;; trap_if a2,heap_oob
;; ld a2,8(a1)
;; slli t2,a0,32
;; srli a2,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0004
;; add a0,a2,t1
;; ult a3,a0,a2##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a1)
;; ld a1,0(a1)
;; add a0,a1,a0
;; auipc a1,0; ld a1,12(a1); j 12; .8byte 0xffff0000
;; add a1,a0,a1
;; ugt t2,t2,a2##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lw a0,0(a0)
;; add a1,a1,a2
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a1,a2
;; ugt a0,a0,a3##ty=i64
;; li a3,0
;; selectif_spectre_guard a1,a3,a2##test=a0
;; lw a0,0(a1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,28 +41,30 @@
;; function u0:0:
;; block0:
;; uext.w a7,a0
;; slli a7,a0,32
;; srli t4,a7,32
;; ld t3,8(a2)
;; ld t4,0(a2)
;; add t4,t4,a7
;; uge a6,a7,t3##ty=i64
;; li t3,0
;; selectif_spectre_guard a7,t3,t4##test=a6
;; sb a1,0(a7)
;; ld t0,0(a2)
;; add t0,t0,t4
;; uge a7,t4,t3##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; sb a1,0(t3)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a7,a0
;; slli a7,a0,32
;; srli t4,a7,32
;; ld t3,8(a1)
;; ld t4,0(a1)
;; add t4,t4,a7
;; uge a6,a7,t3##ty=i64
;; li t3,0
;; selectif_spectre_guard a7,t3,t4##test=a6
;; lbu a0,0(a7)
;; ld t0,0(a1)
;; add t0,t0,t4
;; uge a7,t4,t3##ty=i64
;; li t4,0
;; selectif_spectre_guard t3,t4,t0##test=a7
;; lbu a0,0(t3)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,38 +41,40 @@
;; function u0:0:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a3,t2,32
;; ld a0,8(a2)
;; lui t1,1048575
;; addi t1,t1,4095
;; add a3,a0,t1
;; lui t2,1048575
;; addi t2,t2,4095
;; add a4,a0,t2
;; ld a0,0(a2)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard t2,a2,a0##test=t1
;; sb a1,0(t2)
;; add a0,a0,a3
;; lui t2,1
;; add a2,a0,t2
;; ugt t2,a3,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sb a1,0(a0)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t2,a0
;; slli t2,a0,32
;; srli a2,t2,32
;; ld a0,8(a1)
;; lui t1,1048575
;; addi t1,t1,4095
;; add a2,a0,t1
;; lui t2,1048575
;; addi t2,t2,4095
;; add a3,a0,t2
;; ld a0,0(a1)
;; add a0,a0,t2
;; lui t1,1
;; add a0,a0,t1
;; ugt t1,t2,a2##ty=i64
;; li a1,0
;; selectif_spectre_guard t2,a1,a0##test=t1
;; lbu a0,0(t2)
;; add a0,a0,a2
;; lui t2,1
;; add a1,a0,t2
;; ugt t2,a2,a3##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lbu a0,0(a0)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -41,40 +41,42 @@
;; function u0:0:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0001
;; add t2,a0,t0
;; ult a3,t2,a0##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a2)
;; slli t2,a0,32
;; srli a3,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0001
;; add a0,a3,t1
;; ult a4,a0,a3##ty=i64
;; trap_if a4,heap_oob
;; ld a4,8(a2)
;; ld a2,0(a2)
;; add a0,a2,a0
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a0,a2
;; ugt t2,t2,a3##ty=i64
;; add a2,a2,a3
;; auipc a3,0; ld a3,12(a3); j 12; .8byte 0xffff0000
;; add a2,a2,a3
;; ugt a0,a0,a4##ty=i64
;; li a3,0
;; selectif_spectre_guard a0,a3,a2##test=t2
;; sb a1,0(a0)
;; selectif_spectre_guard a4,a3,a2##test=a0
;; sb a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a0,a0
;; auipc t0,0; ld t0,12(t0); j 12; .8byte 0xffff0001
;; add t2,a0,t0
;; ult a2,t2,a0##ty=i64
;; trap_if a2,heap_oob
;; ld a2,8(a1)
;; slli t2,a0,32
;; srli a2,t2,32
;; auipc t1,0; ld t1,12(t1); j 12; .8byte 0xffff0001
;; add a0,a2,t1
;; ult a3,a0,a2##ty=i64
;; trap_if a3,heap_oob
;; ld a3,8(a1)
;; ld a1,0(a1)
;; add a0,a1,a0
;; auipc a1,0; ld a1,12(a1); j 12; .8byte 0xffff0000
;; add a1,a0,a1
;; ugt t2,t2,a2##ty=i64
;; li a2,0
;; selectif_spectre_guard a0,a2,a1##test=t2
;; lbu a0,0(a0)
;; add a1,a1,a2
;; auipc a2,0; ld a2,12(a2); j 12; .8byte 0xffff0000
;; add a2,a1,a2
;; ugt a0,a0,a3##ty=i64
;; li a3,0
;; selectif_spectre_guard a1,a3,a2##test=a0
;; lbu a0,0(a1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,15 +39,16 @@
;; function u0:0:
;; block0:
;; uext.w a6,a0
;; lui a5,65536
;; addi a5,a5,4092
;; ugt t3,a6,a5##ty=i64
;; bne t3,zero,taken(label1),not_taken(label2)
;; slli a6,a0,32
;; srli t3,a6,32
;; lui a6,65536
;; addi a6,a6,4092
;; ugt t4,t3,a6##ty=i64
;; bne t4,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a2)
;; add t3,t3,a6
;; sw a1,0(t3)
;; ld t4,0(a2)
;; add t4,t4,t3
;; sw a1,0(t4)
;; j label3
;; block3:
;; ret
@@ -56,15 +57,16 @@
;;
;; function u0:1:
;; block0:
;; uext.w a6,a0
;; lui a5,65536
;; addi a5,a5,4092
;; ugt t3,a6,a5##ty=i64
;; bne t3,zero,taken(label1),not_taken(label2)
;; slli a6,a0,32
;; srli t3,a6,32
;; lui a6,65536
;; addi a6,a6,4092
;; ugt t4,t3,a6##ty=i64
;; bne t4,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a1)
;; add t3,t3,a6
;; lw a0,0(t3)
;; ld t4,0(a1)
;; add t4,t4,t3
;; lw a0,0(t4)
;; j label3
;; block3:
;; ret

View File

@@ -39,17 +39,18 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; lui a7,65535
;; addi a7,a7,4092
;; ugt t0,t3,a7##ty=i64
;; bne t0,zero,taken(label1),not_taken(label2)
;; slli t3,a0,32
;; srli t0,t3,32
;; lui t3,65535
;; addi t3,t3,4092
;; ugt t1,t0,t3##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t0,0(a2)
;; add t0,t0,t3
;; lui t4,1
;; add t1,t0,t4
;; sw a1,0(t1)
;; ld t1,0(a2)
;; add t1,t1,t0
;; lui t0,1
;; add t2,t1,t0
;; sw a1,0(t2)
;; j label3
;; block3:
;; ret
@@ -58,17 +59,18 @@
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; lui a7,65535
;; addi a7,a7,4092
;; ugt t0,t3,a7##ty=i64
;; bne t0,zero,taken(label1),not_taken(label2)
;; slli t3,a0,32
;; srli t0,t3,32
;; lui t3,65535
;; addi t3,t3,4092
;; ugt t1,t0,t3##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t0,0(a1)
;; add t0,t0,t3
;; lui t4,1
;; add t1,t0,t4
;; lw a0,0(t1)
;; ld t1,0(a1)
;; add t1,t1,t0
;; lui t0,1
;; add t2,t1,t0
;; lw a0,0(t2)
;; j label3
;; block3:
;; ret

View File

@@ -39,15 +39,16 @@
;; function u0:0:
;; block0:
;; uext.w a6,a0
;; lui a5,65536
;; addi a5,a5,4095
;; ugt t3,a6,a5##ty=i64
;; bne t3,zero,taken(label1),not_taken(label2)
;; slli a6,a0,32
;; srli t3,a6,32
;; lui a6,65536
;; addi a6,a6,4095
;; ugt t4,t3,a6##ty=i64
;; bne t4,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a2)
;; add t3,t3,a6
;; sb a1,0(t3)
;; ld t4,0(a2)
;; add t4,t4,t3
;; sb a1,0(t4)
;; j label3
;; block3:
;; ret
@@ -56,15 +57,16 @@
;;
;; function u0:1:
;; block0:
;; uext.w a6,a0
;; lui a5,65536
;; addi a5,a5,4095
;; ugt t3,a6,a5##ty=i64
;; bne t3,zero,taken(label1),not_taken(label2)
;; slli a6,a0,32
;; srli t3,a6,32
;; lui a6,65536
;; addi a6,a6,4095
;; ugt t4,t3,a6##ty=i64
;; bne t4,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t3,0(a1)
;; add t3,t3,a6
;; lbu a0,0(t3)
;; ld t4,0(a1)
;; add t4,t4,t3
;; lbu a0,0(t4)
;; j label3
;; block3:
;; ret

View File

@@ -39,17 +39,18 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; lui a7,65535
;; addi a7,a7,4095
;; ugt t0,t3,a7##ty=i64
;; bne t0,zero,taken(label1),not_taken(label2)
;; slli t3,a0,32
;; srli t0,t3,32
;; lui t3,65535
;; addi t3,t3,4095
;; ugt t1,t0,t3##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t0,0(a2)
;; add t0,t0,t3
;; lui t4,1
;; add t1,t0,t4
;; sb a1,0(t1)
;; ld t1,0(a2)
;; add t1,t1,t0
;; lui t0,1
;; add t2,t1,t0
;; sb a1,0(t2)
;; j label3
;; block3:
;; ret
@@ -58,17 +59,18 @@
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; lui a7,65535
;; addi a7,a7,4095
;; ugt t0,t3,a7##ty=i64
;; bne t0,zero,taken(label1),not_taken(label2)
;; slli t3,a0,32
;; srli t0,t3,32
;; lui t3,65535
;; addi t3,t3,4095
;; ugt t1,t0,t3##ty=i64
;; bne t1,zero,taken(label1),not_taken(label2)
;; block2:
;; ld t0,0(a1)
;; add t0,t0,t3
;; lui t4,1
;; add t1,t0,t4
;; lbu a0,0(t1)
;; ld t1,0(a1)
;; add t1,t1,t0
;; lui t0,1
;; add t2,t1,t0
;; lbu a0,0(t2)
;; j label3
;; block3:
;; ret

View File

@@ -39,30 +39,32 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,0(a2)
;; add t4,t4,t3
;; lui a6,65536
;; addi a6,a6,4092
;; ugt t0,t3,a6##ty=i64
;; li t1,0
;; selectif_spectre_guard t3,t1,t4##test=t0
;; sw a1,0(t3)
;; add t4,t4,t0
;; lui a7,65536
;; addi a7,a7,4092
;; ugt t0,t0,a7##ty=i64
;; li t2,0
;; selectif_spectre_guard t1,t2,t4##test=t0
;; sw a1,0(t1)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,0(a1)
;; add t4,t4,t3
;; lui a6,65536
;; addi a6,a6,4092
;; ugt t0,t3,a6##ty=i64
;; li t1,0
;; selectif_spectre_guard t3,t1,t4##test=t0
;; lw a0,0(t3)
;; add t4,t4,t0
;; lui a7,65536
;; addi a7,a7,4092
;; ugt t0,t0,a7##ty=i64
;; li t2,0
;; selectif_spectre_guard t1,t2,t4##test=t0
;; lw a0,0(t1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,34 +39,36 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,0(a2)
;; add t1,t1,t0
;; lui t4,1
;; add t1,t1,t4
;; lui t3,65535
;; addi t3,t3,4092
;; ugt t2,t0,t3##ty=i64
;; li a0,0
;; selectif_spectre_guard t0,a0,t1##test=t2
;; sw a1,0(t0)
;; add t1,t1,t2
;; lui t0,1
;; add a0,t1,t0
;; lui t4,65535
;; addi t4,t4,4092
;; ugt t2,t2,t4##ty=i64
;; li a2,0
;; selectif_spectre_guard t1,a2,a0##test=t2
;; sw a1,0(t1)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,0(a1)
;; add t1,t1,t0
;; lui t4,1
;; add t1,t1,t4
;; lui t3,65535
;; addi t3,t3,4092
;; ugt t2,t0,t3##ty=i64
;; li a0,0
;; selectif_spectre_guard t0,a0,t1##test=t2
;; lw a0,0(t0)
;; add t1,t1,t2
;; lui t0,1
;; add a0,t1,t0
;; lui t4,65535
;; addi t4,t4,4092
;; ugt t2,t2,t4##ty=i64
;; li a1,0
;; selectif_spectre_guard t1,a1,a0##test=t2
;; lw a0,0(t1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,30 +39,32 @@
;; function u0:0:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,0(a2)
;; add t4,t4,t3
;; lui a6,65536
;; addi a6,a6,4095
;; ugt t0,t3,a6##ty=i64
;; li t1,0
;; selectif_spectre_guard t3,t1,t4##test=t0
;; sb a1,0(t3)
;; add t4,t4,t0
;; lui a7,65536
;; addi a7,a7,4095
;; ugt t0,t0,a7##ty=i64
;; li t2,0
;; selectif_spectre_guard t1,t2,t4##test=t0
;; sb a1,0(t1)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t3,a0
;; slli t3,a0,32
;; srli t0,t3,32
;; ld t4,0(a1)
;; add t4,t4,t3
;; lui a6,65536
;; addi a6,a6,4095
;; ugt t0,t3,a6##ty=i64
;; li t1,0
;; selectif_spectre_guard t3,t1,t4##test=t0
;; lbu a0,0(t3)
;; add t4,t4,t0
;; lui a7,65536
;; addi a7,a7,4095
;; ugt t0,t0,a7##ty=i64
;; li t2,0
;; selectif_spectre_guard t1,t2,t4##test=t0
;; lbu a0,0(t1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,34 +39,36 @@
;; function u0:0:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,0(a2)
;; add t1,t1,t0
;; lui t4,1
;; add t1,t1,t4
;; lui t3,65535
;; addi t3,t3,4095
;; ugt t2,t0,t3##ty=i64
;; li a0,0
;; selectif_spectre_guard t0,a0,t1##test=t2
;; sb a1,0(t0)
;; add t1,t1,t2
;; lui t0,1
;; add a0,t1,t0
;; lui t4,65535
;; addi t4,t4,4095
;; ugt t2,t2,t4##ty=i64
;; li a2,0
;; selectif_spectre_guard t1,a2,a0##test=t2
;; sb a1,0(t1)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w t0,a0
;; slli t0,a0,32
;; srli t2,t0,32
;; ld t1,0(a1)
;; add t1,t1,t0
;; lui t4,1
;; add t1,t1,t4
;; lui t3,65535
;; addi t3,t3,4095
;; ugt t2,t0,t3##ty=i64
;; li a0,0
;; selectif_spectre_guard t0,a0,t1##test=t2
;; lbu a0,0(t0)
;; add t1,t1,t2
;; lui t0,1
;; add a0,t1,t0
;; lui t4,65535
;; addi t4,t4,4095
;; ugt t2,t2,t4##ty=i64
;; li a1,0
;; selectif_spectre_guard t1,a1,a0##test=t2
;; lbu a0,0(t1)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,20 +39,22 @@
;; function u0:0:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a2)
;; add a3,a4,a3
;; sw a1,0(a3)
;; add a4,a4,a5
;; sw a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a1)
;; add a3,a4,a3
;; lw a0,0(a3)
;; add a4,a4,a5
;; lw a0,0(a4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,24 +39,26 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a2)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; sw a1,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; sw a1,0(a7)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a1)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; lw a0,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; lw a0,0(a7)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,20 +39,22 @@
;; function u0:0:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a2)
;; add a3,a4,a3
;; sb a1,0(a3)
;; add a4,a4,a5
;; sb a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a1)
;; add a3,a4,a3
;; lbu a0,0(a3)
;; add a4,a4,a5
;; lbu a0,0(a4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,24 +39,26 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a2)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; sb a1,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; sb a1,0(a7)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a1)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; lbu a0,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; lbu a0,0(a7)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,20 +39,22 @@
;; function u0:0:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a2)
;; add a3,a4,a3
;; sw a1,0(a3)
;; add a4,a4,a5
;; sw a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a1)
;; add a3,a4,a3
;; lw a0,0(a3)
;; add a4,a4,a5
;; lw a0,0(a4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,24 +39,26 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a2)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; sw a1,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; sw a1,0(a7)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a1)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; lw a0,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; lw a0,0(a7)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,20 +39,22 @@
;; function u0:0:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a2)
;; add a3,a4,a3
;; sb a1,0(a3)
;; add a4,a4,a5
;; sb a1,0(a4)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a3,a0
;; slli a3,a0,32
;; srli a5,a3,32
;; ld a4,0(a1)
;; add a3,a4,a3
;; lbu a0,0(a3)
;; add a4,a4,a5
;; lbu a0,0(a4)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -39,24 +39,26 @@
;; function u0:0:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a2)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; sb a1,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; sb a1,0(a7)
;; j label1
;; block1:
;; ret
;;
;; function u0:1:
;; block0:
;; uext.w a5,a0
;; slli a5,a0,32
;; srli a7,a5,32
;; ld a6,0(a1)
;; add a5,a6,a5
;; lui a4,1
;; add a6,a5,a4
;; lbu a0,0(a6)
;; add a6,a6,a7
;; lui a5,1
;; add a7,a6,a5
;; lbu a0,0(a7)
;; j label1
;; block1:
;; ret
;; ret

View File

@@ -3,7 +3,9 @@ test run
target aarch64
target s390x
target x86_64
target riscv64
target riscv64
target riscv64 has_zbb
target riscv64 has_zbkb
;;;; basic uextend

View File

@@ -5,6 +5,8 @@ target aarch64
target s390x
target x86_64
target riscv64
target riscv64 has_zbb
target riscv64 has_zbkb
function %i128_uextend_i64(i64) -> i128 {
block0(v0: i64):