Commit b7971e95 authored by Ng Zhi An's avatar Ng Zhi An Committed by Commit Bot

[wasm-simd][liftoff][arm][arm64] Implement extract_lane

Implement all 8 extract_lane ops on ARM and ARM64.

Bug: v8:9909
Change-Id: I72e30b53c92933bd5830008ec02e1f4526e8b4c4
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2103169
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#66735}
parent f2fd4923
...@@ -1562,7 +1562,8 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst, ...@@ -1562,7 +1562,8 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "f64x2extractlane"); ExtractLane(dst.fp(), liftoff::GetSimd128Register(lhs.low_fp()),
imm_lane_idx);
} }
void LiftoffAssembler::emit_f64x2_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f64x2_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1579,7 +1580,8 @@ void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst, ...@@ -1579,7 +1580,8 @@ void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "f32x4extractlane"); ExtractLane(liftoff::GetFloatRegister(dst.fp()),
liftoff::GetSimd128Register(lhs.low_fp()), imm_lane_idx);
} }
void LiftoffAssembler::emit_f32x4_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f32x4_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1600,7 +1602,10 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst, ...@@ -1600,7 +1602,10 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i64x2extractlane"); ExtractLane(dst.low_gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonS32,
imm_lane_idx * 2);
ExtractLane(dst.high_gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonS32,
imm_lane_idx * 2 + 1);
} }
void LiftoffAssembler::emit_i64x2_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i64x2_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1618,7 +1623,8 @@ void LiftoffAssembler::emit_i32x4_splat(LiftoffRegister dst, ...@@ -1618,7 +1623,8 @@ void LiftoffAssembler::emit_i32x4_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i32x4_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_i32x4_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i32x4extractlane"); ExtractLane(dst.gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonS32,
imm_lane_idx);
} }
void LiftoffAssembler::emit_i32x4_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i32x4_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1643,13 +1649,15 @@ void LiftoffAssembler::emit_i16x8_add(LiftoffRegister dst, LiftoffRegister lhs, ...@@ -1643,13 +1649,15 @@ void LiftoffAssembler::emit_i16x8_add(LiftoffRegister dst, LiftoffRegister lhs,
void LiftoffAssembler::emit_i16x8_extract_lane_u(LiftoffRegister dst, void LiftoffAssembler::emit_i16x8_extract_lane_u(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i16x8extractlane_u"); ExtractLane(dst.gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonU16,
imm_lane_idx);
} }
void LiftoffAssembler::emit_i16x8_extract_lane_s(LiftoffRegister dst, void LiftoffAssembler::emit_i16x8_extract_lane_s(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i16x8extractlane_s"); ExtractLane(dst.gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonS16,
imm_lane_idx);
} }
void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst, void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst,
...@@ -1660,13 +1668,15 @@ void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst, ...@@ -1660,13 +1668,15 @@ void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i8x16_extract_lane_u(LiftoffRegister dst, void LiftoffAssembler::emit_i8x16_extract_lane_u(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i8x16extractlane_u"); ExtractLane(dst.gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonU8,
imm_lane_idx);
} }
void LiftoffAssembler::emit_i8x16_extract_lane_s(LiftoffRegister dst, void LiftoffAssembler::emit_i8x16_extract_lane_s(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i8x16extractlane_s"); ExtractLane(dst.gp(), liftoff::GetSimd128Register(lhs.low_fp()), NeonS8,
imm_lane_idx);
} }
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
......
...@@ -1092,7 +1092,7 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst, ...@@ -1092,7 +1092,7 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "f64x2extractlane"); Mov(dst.fp().D(), lhs.fp().V2D(), imm_lane_idx);
} }
void LiftoffAssembler::emit_f64x2_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f64x2_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1108,7 +1108,7 @@ void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst, ...@@ -1108,7 +1108,7 @@ void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "f32x4extractlane"); Mov(dst.fp().S(), lhs.fp().V4S(), imm_lane_idx);
} }
void LiftoffAssembler::emit_f32x4_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f32x4_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1124,7 +1124,7 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst, ...@@ -1124,7 +1124,7 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i64x2extractlane"); Mov(dst.gp().X(), lhs.fp().V2D(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i64x2_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i64x2_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1140,7 +1140,7 @@ void LiftoffAssembler::emit_i32x4_splat(LiftoffRegister dst, ...@@ -1140,7 +1140,7 @@ void LiftoffAssembler::emit_i32x4_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i32x4_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_i32x4_extract_lane(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i32x4extractlane"); Mov(dst.gp().W(), lhs.fp().V4S(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i32x4_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i32x4_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1156,13 +1156,13 @@ void LiftoffAssembler::emit_i16x8_splat(LiftoffRegister dst, ...@@ -1156,13 +1156,13 @@ void LiftoffAssembler::emit_i16x8_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i16x8_extract_lane_u(LiftoffRegister dst, void LiftoffAssembler::emit_i16x8_extract_lane_u(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i16x8extractlane_u"); Umov(dst.gp().W(), lhs.fp().V8H(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i16x8_extract_lane_s(LiftoffRegister dst, void LiftoffAssembler::emit_i16x8_extract_lane_s(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i16x8extractlane_s"); Smov(dst.gp().W(), lhs.fp().V8H(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i16x8_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i16x8_add(LiftoffRegister dst, LiftoffRegister lhs,
...@@ -1178,13 +1178,13 @@ void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst, ...@@ -1178,13 +1178,13 @@ void LiftoffAssembler::emit_i8x16_splat(LiftoffRegister dst,
void LiftoffAssembler::emit_i8x16_extract_lane_u(LiftoffRegister dst, void LiftoffAssembler::emit_i8x16_extract_lane_u(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i8x16extractlane_u"); Umov(dst.gp().W(), lhs.fp().V16B(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i8x16_extract_lane_s(LiftoffRegister dst, void LiftoffAssembler::emit_i8x16_extract_lane_s(LiftoffRegister dst,
LiftoffRegister lhs, LiftoffRegister lhs,
uint8_t imm_lane_idx) { uint8_t imm_lane_idx) {
bailout(kSimd, "i8x16extractlane_s"); Smov(dst.gp().W(), lhs.fp().V16B(), imm_lane_idx);
} }
void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment