Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 070c243

Browse files
8274107: Cherry pick GTK WebKit 2.32.4 changes
Backport-of: 478512b705af840cd9f658b22f272165bc1c1bc3
1 parent 896089e commit 070c243

File tree

131 files changed

+1606
-768
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+1606
-768
lines changed

modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/ARM64Assembler.h

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2012-2020 Apple Inc. All rights reserved.
2+
* Copyright (C) 2012-2021 Apple Inc. All rights reserved.
33
*
44
* Redistribution and use in source and binary forms, with or without
55
* modification, are permitted provided that the following conditions
@@ -1111,6 +1111,20 @@ class ARM64Assembler {
11111111
insn(0x0);
11121112
}
11131113

1114+
template<int datasize>
1115+
ALWAYS_INLINE static bool isValidLDPImm(int immediate)
1116+
{
1117+
unsigned immedShiftAmount = memPairOffsetShift(false, MEMPAIROPSIZE_INT(datasize));
1118+
return isValidSignedImm7(immediate, immedShiftAmount);
1119+
}
1120+
1121+
template<int datasize>
1122+
ALWAYS_INLINE static bool isValidLDPFPImm(int immediate)
1123+
{
1124+
unsigned immedShiftAmount = memPairOffsetShift(true, MEMPAIROPSIZE_FP(datasize));
1125+
return isValidSignedImm7(immediate, immedShiftAmount);
1126+
}
1127+
11141128
template<int datasize>
11151129
ALWAYS_INLINE void ldp(RegisterID rt, RegisterID rt2, RegisterID rn, PairPostIndex simm)
11161130
{
@@ -1126,17 +1140,45 @@ class ARM64Assembler {
11261140
}
11271141

11281142
template<int datasize>
1129-
ALWAYS_INLINE void ldp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
1143+
ALWAYS_INLINE void ldp(RegisterID rt, RegisterID rt2, RegisterID rn, int simm = 0)
1144+
{
1145+
CHECK_DATASIZE();
1146+
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, simm, rn, rt, rt2));
1147+
}
1148+
1149+
template<int datasize>
1150+
ALWAYS_INLINE void ldnp(RegisterID rt, RegisterID rt2, RegisterID rn, int simm = 0)
1151+
{
1152+
CHECK_DATASIZE();
1153+
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, simm, rn, rt, rt2));
1154+
}
1155+
1156+
template<int datasize>
1157+
ALWAYS_INLINE void ldp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, PairPostIndex simm)
1158+
{
1159+
CHECK_DATASIZE();
1160+
insn(loadStoreRegisterPairPostIndex(MEMPAIROPSIZE_FP(datasize), true, MemOp_LOAD, simm, rn, rt, rt2));
1161+
}
1162+
1163+
template<int datasize>
1164+
ALWAYS_INLINE void ldp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, PairPreIndex simm)
1165+
{
1166+
CHECK_DATASIZE();
1167+
insn(loadStoreRegisterPairPreIndex(MEMPAIROPSIZE_FP(datasize), true, MemOp_LOAD, simm, rn, rt, rt2));
1168+
}
1169+
1170+
template<int datasize>
1171+
ALWAYS_INLINE void ldp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, int simm = 0)
11301172
{
11311173
CHECK_DATASIZE();
1132-
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, pimm, rn, rt, rt2));
1174+
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_FP(datasize), true, MemOp_LOAD, simm, rn, rt, rt2));
11331175
}
11341176

11351177
template<int datasize>
1136-
ALWAYS_INLINE void ldnp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
1178+
ALWAYS_INLINE void ldnp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, int simm = 0)
11371179
{
11381180
CHECK_DATASIZE();
1139-
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, pimm, rn, rt, rt2));
1181+
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_FP(datasize), true, MemOp_LOAD, simm, rn, rt, rt2));
11401182
}
11411183

11421184
template<int datasize>
@@ -1740,6 +1782,18 @@ class ARM64Assembler {
17401782
smaddl(rd, rn, rm, ARM64Registers::zr);
17411783
}
17421784

1785+
template<int datasize>
1786+
ALWAYS_INLINE static bool isValidSTPImm(int immediate)
1787+
{
1788+
return isValidLDPImm<datasize>(immediate);
1789+
}
1790+
1791+
template<int datasize>
1792+
ALWAYS_INLINE static bool isValidSTPFPImm(int immediate)
1793+
{
1794+
return isValidLDPFPImm<datasize>(immediate);
1795+
}
1796+
17431797
template<int datasize>
17441798
ALWAYS_INLINE void stp(RegisterID rt, RegisterID rt2, RegisterID rn, PairPostIndex simm)
17451799
{
@@ -1755,17 +1809,45 @@ class ARM64Assembler {
17551809
}
17561810

17571811
template<int datasize>
1758-
ALWAYS_INLINE void stp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
1812+
ALWAYS_INLINE void stp(RegisterID rt, RegisterID rt2, RegisterID rn, int simm = 0)
1813+
{
1814+
CHECK_DATASIZE();
1815+
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, simm, rn, rt, rt2));
1816+
}
1817+
1818+
template<int datasize>
1819+
ALWAYS_INLINE void stnp(RegisterID rt, RegisterID rt2, RegisterID rn, int simm = 0)
1820+
{
1821+
CHECK_DATASIZE();
1822+
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, simm, rn, rt, rt2));
1823+
}
1824+
1825+
template<int datasize>
1826+
ALWAYS_INLINE void stp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, PairPostIndex simm)
1827+
{
1828+
CHECK_DATASIZE();
1829+
insn(loadStoreRegisterPairPostIndex(MEMPAIROPSIZE_FP(datasize), true, MemOp_STORE, simm, rn, rt, rt2));
1830+
}
1831+
1832+
template<int datasize>
1833+
ALWAYS_INLINE void stp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, PairPreIndex simm)
1834+
{
1835+
CHECK_DATASIZE();
1836+
insn(loadStoreRegisterPairPreIndex(MEMPAIROPSIZE_FP(datasize), true, MemOp_STORE, simm, rn, rt, rt2));
1837+
}
1838+
1839+
template<int datasize>
1840+
ALWAYS_INLINE void stp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, int simm = 0)
17591841
{
17601842
CHECK_DATASIZE();
1761-
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, pimm, rn, rt, rt2));
1843+
insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_FP(datasize), true, MemOp_STORE, simm, rn, rt, rt2));
17621844
}
17631845

17641846
template<int datasize>
1765-
ALWAYS_INLINE void stnp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
1847+
ALWAYS_INLINE void stnp(FPRegisterID rt, FPRegisterID rt2, RegisterID rn, int simm = 0)
17661848
{
17671849
CHECK_DATASIZE();
1768-
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, pimm, rn, rt, rt2));
1850+
insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_FP(datasize), true, MemOp_STORE, simm, rn, rt, rt2));
17691851
}
17701852

17711853
template<int datasize>
@@ -3541,6 +3623,7 @@ class ARM64Assembler {
35413623
ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
35423624
ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
35433625
unsigned immedShiftAmount = memPairOffsetShift(V, size);
3626+
RELEASE_ASSERT(isValidSignedImm7(immediate, immedShiftAmount));
35443627
int imm7 = immediate >> immedShiftAmount;
35453628
ASSERT((imm7 << immedShiftAmount) == immediate && isInt<7>(imm7));
35463629
return (0x28800000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);
@@ -3572,6 +3655,7 @@ class ARM64Assembler {
35723655
ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
35733656
ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
35743657
unsigned immedShiftAmount = memPairOffsetShift(V, size);
3658+
RELEASE_ASSERT(isValidSignedImm7(immediate, immedShiftAmount));
35753659
int imm7 = immediate >> immedShiftAmount;
35763660
ASSERT((imm7 << immedShiftAmount) == immediate && isInt<7>(imm7));
35773661
return (0x29800000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);
@@ -3589,6 +3673,7 @@ class ARM64Assembler {
35893673
ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
35903674
ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
35913675
unsigned immedShiftAmount = memPairOffsetShift(V, size);
3676+
RELEASE_ASSERT(isValidSignedImm7(immediate, immedShiftAmount));
35923677
int imm7 = immediate >> immedShiftAmount;
35933678
ASSERT((imm7 << immedShiftAmount) == immediate && isInt<7>(imm7));
35943679
return (0x29000000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);
@@ -3606,6 +3691,7 @@ class ARM64Assembler {
36063691
ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
36073692
ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
36083693
unsigned immedShiftAmount = memPairOffsetShift(V, size);
3694+
RELEASE_ASSERT(isValidSignedImm7(immediate, immedShiftAmount));
36093695
int imm7 = immediate >> immedShiftAmount;
36103696
ASSERT((imm7 << immedShiftAmount) == immediate && isInt<7>(imm7));
36113697
return (0x28000000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);

modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/AssemblerCommon.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2012-2019 Apple Inc. All rights reserved.
2+
* Copyright (C) 2012-2021 Apple Inc. All rights reserved.
33
*
44
* Redistribution and use in source and binary forms, with or without
55
* modification, are permitted provided that the following conditions
@@ -74,6 +74,15 @@ ALWAYS_INLINE bool isValidSignedImm9(int32_t value)
7474
return isInt9(value);
7575
}
7676

77+
ALWAYS_INLINE bool isValidSignedImm7(int32_t value, int alignmentShiftAmount)
78+
{
79+
constexpr int32_t disallowedHighBits = 32 - 7;
80+
int32_t shiftedValue = value >> alignmentShiftAmount;
81+
bool fitsIn7Bits = shiftedValue == ((shiftedValue << disallowedHighBits) >> disallowedHighBits);
82+
bool hasCorrectAlignment = value == (shiftedValue << alignmentShiftAmount);
83+
return fitsIn7Bits && hasCorrectAlignment;
84+
}
85+
7786
class ARM64LogicalImmediate {
7887
public:
7988
static ARM64LogicalImmediate create32(uint32_t value)

modules/javafx.web/src/main/native/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,16 @@ class MacroAssemblerARM64 : public AbstractMacroAssembler<Assembler> {
12261226
m_assembler.ldnp<64>(dest1, dest2, src, offset.m_value);
12271227
}
12281228

1229+
void loadPair64(RegisterID src, FPRegisterID dest1, FPRegisterID dest2)
1230+
{
1231+
loadPair64(src, TrustedImm32(0), dest1, dest2);
1232+
}
1233+
1234+
void loadPair64(RegisterID src, TrustedImm32 offset, FPRegisterID dest1, FPRegisterID dest2)
1235+
{
1236+
m_assembler.ldp<64>(dest1, dest2, src, offset.m_value);
1237+
}
1238+
12291239
void abortWithReason(AbortReason reason)
12301240
{
12311241
// It is safe to use dataTempRegister directly since this is a crashing JIT Assert.
@@ -1550,6 +1560,16 @@ class MacroAssemblerARM64 : public AbstractMacroAssembler<Assembler> {
15501560
m_assembler.stnp<64>(src1, src2, dest, offset.m_value);
15511561
}
15521562

1563+
void storePair64(FPRegisterID src1, FPRegisterID src2, RegisterID dest)
1564+
{
1565+
storePair64(src1, src2, dest, TrustedImm32(0));
1566+
}
1567+
1568+
void storePair64(FPRegisterID src1, FPRegisterID src2, RegisterID dest, TrustedImm32 offset)
1569+
{
1570+
m_assembler.stp<64>(src1, src2, dest, offset.m_value);
1571+
}
1572+
15531573
void store32(RegisterID src, ImplicitAddress address)
15541574
{
15551575
if (tryStoreWithOffset<32>(src, address.base, address.offset))

0 commit comments

Comments
 (0)