|
|
@ -1,4 +1,4 @@ |
|
|
|
test compile |
|
|
|
test compile precise-output |
|
|
|
target aarch64 |
|
|
|
|
|
|
|
function %i8x16_splat_add(i8, i8) -> i8x16 { |
|
|
@ -13,10 +13,11 @@ block0(v0: i8, v1: i8): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.16b, w0 |
|
|
|
; nextln: dup v6.16b, w1 |
|
|
|
; nextln: add v0.16b, v4.16b, v6.16b |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.16b, w0 |
|
|
|
; dup v17.16b, w1 |
|
|
|
; add v0.16b, v16.16b, v17.16b |
|
|
|
; ret |
|
|
|
|
|
|
|
function %i16x8_splat_add(i16, i16) -> i16x8 { |
|
|
|
gv0 = dyn_scale_target_const.i16x8 |
|
|
@ -30,10 +31,11 @@ block0(v0: i16, v1: i16): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.8h, w0 |
|
|
|
; nextln: dup v6.8h, w1 |
|
|
|
; nextln: add v0.8h, v4.8h, v6.8h |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.8h, w0 |
|
|
|
; dup v17.8h, w1 |
|
|
|
; add v0.8h, v16.8h, v17.8h |
|
|
|
; ret |
|
|
|
|
|
|
|
function %i32x4_splat_mul(i32, i32) -> i32x4 { |
|
|
|
gv0 = dyn_scale_target_const.i32x4 |
|
|
@ -47,10 +49,11 @@ block0(v0: i32, v1: i32): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.4s, w0 |
|
|
|
; nextln: dup v6.4s, w1 |
|
|
|
; nextln: mul v0.4s, v4.4s, v6.4s |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.4s, w0 |
|
|
|
; dup v17.4s, w1 |
|
|
|
; mul v0.4s, v16.4s, v17.4s |
|
|
|
; ret |
|
|
|
|
|
|
|
function %i64x2_splat_sub(i64, i64) -> i64x2 { |
|
|
|
gv0 = dyn_scale_target_const.i64x2 |
|
|
@ -64,10 +67,11 @@ block0(v0: i64, v1: i64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, x0 |
|
|
|
; nextln: dup v6.2d, x1 |
|
|
|
; nextln: sub v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, x0 |
|
|
|
; dup v17.2d, x1 |
|
|
|
; sub v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f32x4_splat_add(f32, f32) -> f32x4 { |
|
|
|
gv0 = dyn_scale_target_const.f32x4 |
|
|
@ -81,10 +85,11 @@ block0(v0: f32, v1: f32): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.4s, v0.s[0] |
|
|
|
; nextln: dup v6.4s, v1.s[0] |
|
|
|
; nextln: fadd v0.4s, v4.4s, v6.4s |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.4s, v0.s[0] |
|
|
|
; dup v17.4s, v1.s[0] |
|
|
|
; fadd v0.4s, v16.4s, v17.4s |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_sub(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -98,10 +103,11 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fsub v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, v0.d[0] |
|
|
|
; dup v17.2d, v1.d[0] |
|
|
|
; fsub v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_mul(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -115,10 +121,11 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fmul v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, v0.d[0] |
|
|
|
; dup v17.2d, v1.d[0] |
|
|
|
; fmul v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_div(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -132,10 +139,11 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fdiv v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, v0.d[0] |
|
|
|
; dup v17.2d, v1.d[0] |
|
|
|
; fdiv v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_min(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -149,10 +157,11 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fmin v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, v0.d[0] |
|
|
|
; dup v17.2d, v1.d[0] |
|
|
|
; fmin v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_max(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -166,10 +175,11 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fmax v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v16.2d, v0.d[0] |
|
|
|
; dup v17.2d, v1.d[0] |
|
|
|
; fmax v0.2d, v16.2d, v17.2d |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_min_pseudo(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -183,11 +193,12 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fcmgt v0.2d, v4.2d, v6.2d |
|
|
|
; nextln: bsl v0.16b, v6.16b, v4.16b |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v17.2d, v0.d[0] |
|
|
|
; dup v18.2d, v1.d[0] |
|
|
|
; fcmgt v0.2d, v17.2d, v18.2d |
|
|
|
; bsl v0.16b, v18.16b, v17.16b |
|
|
|
; ret |
|
|
|
|
|
|
|
function %f64x2_splat_max_pseudo(f64, f64) -> f64x2 { |
|
|
|
gv0 = dyn_scale_target_const.f64x2 |
|
|
@ -201,8 +212,9 @@ block0(v0: f64, v1: f64): |
|
|
|
return v5 |
|
|
|
} |
|
|
|
|
|
|
|
; check: dup v4.2d, v0.d[0] |
|
|
|
; nextln: dup v6.2d, v1.d[0] |
|
|
|
; nextln: fcmgt v0.2d, v6.2d, v4.2d |
|
|
|
; nextln: bsl v0.16b, v6.16b, v4.16b |
|
|
|
; nextln: ret |
|
|
|
; block0: |
|
|
|
; dup v17.2d, v0.d[0] |
|
|
|
; dup v18.2d, v1.d[0] |
|
|
|
; fcmgt v0.2d, v18.2d, v17.2d |
|
|
|
; bsl v0.16b, v18.16b, v17.16b |
|
|
|
; ret |
|
|
|