S390 [liftoff]: Implement simd const128
Change-Id: I39049c88f48c81b2f8ce84e9589e05405abce3a6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3453783 Reviewed-by: Junliang Yan <junyan@redhat.com> Commit-Queue: Milad Farazmand <mfarazma@redhat.com> Cr-Commit-Position: refs/heads/main@{#79056}
This commit is contained in:
parent
e08f7ae558
commit
d022238167
@ -5970,6 +5970,13 @@ void TurboAssembler::I32x4TruncSatF64x2UZero(Simd128Register dst,
|
|||||||
vpkls(dst, dst, scratch, Condition(0), Condition(3));
|
vpkls(dst, dst, scratch, Condition(0), Condition(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TurboAssembler::S128Const(Simd128Register dst, uint64_t high, uint64_t low,
|
||||||
|
Register scratch1, Register scratch2) {
|
||||||
|
mov(scratch1, Operand(low));
|
||||||
|
mov(scratch2, Operand(high));
|
||||||
|
vlvgp(dst, scratch2, scratch1);
|
||||||
|
}
|
||||||
|
|
||||||
// Vector LE Load and Transform instructions.
|
// Vector LE Load and Transform instructions.
|
||||||
#ifdef V8_TARGET_BIG_ENDIAN
|
#ifdef V8_TARGET_BIG_ENDIAN
|
||||||
#define IS_BIG_ENDIAN true
|
#define IS_BIG_ENDIAN true
|
||||||
|
@ -1144,6 +1144,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
|
|||||||
Simd128Register scratch);
|
Simd128Register scratch);
|
||||||
void I32x4TruncSatF64x2UZero(Simd128Register dst, Simd128Register src,
|
void I32x4TruncSatF64x2UZero(Simd128Register dst, Simd128Register src,
|
||||||
Simd128Register scratch);
|
Simd128Register scratch);
|
||||||
|
void S128Const(Simd128Register dst, uint64_t high, uint64_t low,
|
||||||
|
Register scratch1, Register scratch2);
|
||||||
void S128Select(Simd128Register dst, Simd128Register src1,
|
void S128Select(Simd128Register dst, Simd128Register src1,
|
||||||
Simd128Register src2, Simd128Register mask);
|
Simd128Register src2, Simd128Register mask);
|
||||||
|
|
||||||
|
@ -2866,9 +2866,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
|||||||
case kS390_S128Const: {
|
case kS390_S128Const: {
|
||||||
uint64_t low = make_uint64(i.InputUint32(1), i.InputUint32(0));
|
uint64_t low = make_uint64(i.InputUint32(1), i.InputUint32(0));
|
||||||
uint64_t high = make_uint64(i.InputUint32(3), i.InputUint32(2));
|
uint64_t high = make_uint64(i.InputUint32(3), i.InputUint32(2));
|
||||||
__ mov(r0, Operand(low));
|
__ S128Const(i.OutputSimd128Register(), high, low, r0, ip);
|
||||||
__ mov(ip, Operand(high));
|
|
||||||
__ vlvgp(i.OutputSimd128Register(), ip, r0);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case kS390_S128Zero: {
|
case kS390_S128Zero: {
|
||||||
|
@ -2662,7 +2662,13 @@ void LiftoffAssembler::emit_i8x16_bitmask(LiftoffRegister dst,
|
|||||||
|
|
||||||
void LiftoffAssembler::emit_s128_const(LiftoffRegister dst,
|
void LiftoffAssembler::emit_s128_const(LiftoffRegister dst,
|
||||||
const uint8_t imms[16]) {
|
const uint8_t imms[16]) {
|
||||||
bailout(kUnsupportedArchitecture, "emit_s128_const");
|
uint64_t vals[2];
|
||||||
|
memcpy(vals, imms, sizeof(vals));
|
||||||
|
#ifdef V8_TARGET_BIG_ENDIAN
|
||||||
|
vals[0] = ByteReverse(vals[0]);
|
||||||
|
vals[1] = ByteReverse(vals[1]);
|
||||||
|
#endif
|
||||||
|
S128Const(dst.fp(), vals[1], vals[0], r0, ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiftoffAssembler::emit_s128_select(LiftoffRegister dst,
|
void LiftoffAssembler::emit_s128_select(LiftoffRegister dst,
|
||||||
|
Loading…
Reference in New Issue
Block a user