Skip to content

Commit 5304243

Browse files
Add assembler support for x86 lfence and sfence
https://bugs.webkit.org/show_bug.cgi?id=181311 <rdar://problem/36301780> Reviewed by Michael Saboff. Useful for testing performance of serializing instructions (hint: it's not good). * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::lfence): (JSC::MacroAssemblerX86Common::sfence): * assembler/X86Assembler.h: (JSC::X86Assembler::lfence): (JSC::X86Assembler::sfence): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@226428 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 9bd4f42 commit 5304243

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

Source/JavaScriptCore/ChangeLog

+18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
2018-01-04 JF Bastien <[email protected]>
2+
3+
Add assembler support for x86 lfence and sfence
4+
https://bugs.webkit.org/show_bug.cgi?id=181311
5+
<rdar://problem/36301780>
6+
7+
Reviewed by Michael Saboff.
8+
9+
Useful for testing performance of serializing instructions (hint:
10+
it's not good).
11+
12+
* assembler/MacroAssemblerX86Common.h:
13+
(JSC::MacroAssemblerX86Common::lfence):
14+
(JSC::MacroAssemblerX86Common::sfence):
15+
* assembler/X86Assembler.h:
16+
(JSC::X86Assembler::lfence):
17+
(JSC::X86Assembler::sfence):
18+
119
2018-01-04 Saam Barati <[email protected]>
220

321
Add a new pattern matching rule to Graph::methodOfGettingAValueProfileFor for SetLocal(@nodeWithHeapPrediction)

Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h

+10
Original file line numberDiff line numberDiff line change
@@ -3886,11 +3886,21 @@ class MacroAssemblerX86Common : public AbstractMacroAssembler<X86Assembler> {
38863886
s_avxCheckState = (flags & (1 << 28)) ? CPUIDCheckState::Set : CPUIDCheckState::Clear;
38873887
}
38883888

3889+
void lfence()
3890+
{
3891+
m_assembler.lfence();
3892+
}
3893+
38893894
void mfence()
38903895
{
38913896
m_assembler.mfence();
38923897
}
38933898

3899+
void sfence()
3900+
{
3901+
m_assembler.sfence();
3902+
}
3903+
38943904
void rdtsc()
38953905
{
38963906
m_assembler.rdtsc();

Source/JavaScriptCore/assembler/X86Assembler.h

+13-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,9 @@ class X86Assembler {
344344
typedef enum {
345345
OP3_ROUNDSS_VssWssIb = 0x0A,
346346
OP3_ROUNDSD_VsdWsdIb = 0x0B,
347+
OP3_LFENCE = 0xE8,
347348
OP3_MFENCE = 0xF0,
349+
OP3_SFENCE = 0xF8,
348350
} ThreeByteOpcodeID;
349351

350352
struct VexPrefix {
@@ -3541,12 +3543,22 @@ class X86Assembler {
35413543
m_formatter.twoByteOp64(OP2_XADD, src, base, index, scale, offset);
35423544
}
35433545
#endif // CPU(X86_64)
3544-
3546+
3547+
void lfence()
3548+
{
3549+
m_formatter.threeByteOp(OP2_3BYTE_ESCAPE_AE, OP3_LFENCE);
3550+
}
3551+
35453552
void mfence()
35463553
{
35473554
m_formatter.threeByteOp(OP2_3BYTE_ESCAPE_AE, OP3_MFENCE);
35483555
}
35493556

3557+
void sfence()
3558+
{
3559+
m_formatter.threeByteOp(OP2_3BYTE_ESCAPE_AE, OP3_SFENCE);
3560+
}
3561+
35503562
void rdtsc()
35513563
{
35523564
m_formatter.twoByteOp(OP2_RDTSC);

0 commit comments

Comments
 (0)