Merge pull request #3005 from afonso360/aarch64-i128-extend
aarch64: Implement uextend/sextend for i128 values
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user