aarch64: Implement lowering uextend/sextend for i128 values

This commit is contained in:
Afonso Bordado
2021-06-20 12:01:51 +01:00
parent da4daa6f32
commit f25f5b2732
4 changed files with 226 additions and 19 deletions

View File

@@ -16,3 +16,109 @@ block0(v0: i8):
; nextln: add x0, x1, x0, SXTB
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_uextend_i64(i64) -> i128 {
block0(v0: i64):
v1 = uextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: movz x1, #0
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_sextend_i64(i64) -> i128 {
block0(v0: i64):
v1 = sextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: asr x1, x0, #63
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_uextend_i32(i32) -> i128 {
block0(v0: i32):
v1 = uextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: mov w0, w0
; nextln: movz x1, #0
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_sextend_i32(i32) -> i128 {
block0(v0: i32):
v1 = sextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sxtw x0, w0
; nextln: asr x1, x0, #63
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_uextend_i16(i16) -> i128 {
block0(v0: i16):
v1 = uextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: uxth w0, w0
; nextln: movz x1, #0
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_sextend_i16(i16) -> i128 {
block0(v0: i16):
v1 = sextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sxth x0, w0
; nextln: asr x1, x0, #63
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_uextend_i8(i8) -> i128 {
block0(v0: i8):
v1 = uextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: uxtb w0, w0
; nextln: movz x1, #0
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
function %i128_sextend_i8(i8) -> i128 {
block0(v0: i8):
v1 = sextend.i128 v0
return v1
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: sxtb x0, w0
; nextln: asr x1, x0, #63
; nextln: ldp fp, lr, [sp], #16
; nextln: ret