summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2015-05-20 09:56:07 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2015-05-20 09:56:07 +0000
commit41386e9cb918eed93b3f13648cbef387e371e451 (patch)
treea97f9d7bd1d9d091833286085f72da9d83fd0606 /Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
parente15dd966d523731101f70ccf768bba12435a0208 (diff)
downloadWebKitGtk-tarball-41386e9cb918eed93b3f13648cbef387e371e451.tar.gz
webkitgtk-2.4.9webkitgtk-2.4.9
Diffstat (limited to 'Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h')
-rw-r--r--Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h88
1 files changed, 39 insertions, 49 deletions
diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h b/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
index b6ae6fc6f..ac09eaca4 100644
--- a/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
+++ b/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -33,7 +33,7 @@
namespace JSC {
-class MacroAssemblerX86Common : public AbstractMacroAssembler<X86Assembler, MacroAssemblerX86Common> {
+class MacroAssemblerX86Common : public AbstractMacroAssembler<X86Assembler> {
public:
#if CPU(X86_64)
static const X86Registers::RegisterID scratchRegister = X86Registers::r11;
@@ -183,18 +183,6 @@ public:
and32(imm, dest);
}
- void countLeadingZeros32(RegisterID src, RegisterID dst)
- {
- m_assembler.bsr_rr(src, dst);
- Jump srcIsNonZero = m_assembler.jCC(x86Condition(NonZero));
- move(TrustedImm32(32), dst);
-
- Jump skipNonZeroCase = jump();
- srcIsNonZero.link(this);
- xor32(TrustedImm32(0x1f), dst);
- skipNonZeroCase.link(this);
- }
-
void lshift32(RegisterID shift_amount, RegisterID dest)
{
ASSERT(shift_amount != dest);
@@ -460,7 +448,7 @@ public:
{
ASSERT(src != dst);
static const double negativeZeroConstant = -0.0;
- loadDouble(TrustedImmPtr(&negativeZeroConstant), dst);
+ loadDouble(&negativeZeroConstant, dst);
m_assembler.andnpd_rr(src, dst);
}
@@ -468,7 +456,7 @@ public:
{
ASSERT(src != dst);
static const double negativeZeroConstant = -0.0;
- loadDouble(TrustedImmPtr(&negativeZeroConstant), dst);
+ loadDouble(&negativeZeroConstant, dst);
m_assembler.xorpd_rr(src, dst);
}
@@ -537,12 +525,12 @@ public:
m_assembler.movzbl_mr(address.offset, address.base, dest);
}
- void load8SignedExtendTo32(BaseIndex address, RegisterID dest)
+ void load8Signed(BaseIndex address, RegisterID dest)
{
m_assembler.movsbl_mr(address.offset, address.base, address.index, address.scale, dest);
}
- void load8SignedExtendTo32(ImplicitAddress address, RegisterID dest)
+ void load8Signed(ImplicitAddress address, RegisterID dest)
{
m_assembler.movsbl_mr(address.offset, address.base, dest);
}
@@ -557,12 +545,12 @@ public:
m_assembler.movzwl_mr(address.offset, address.base, dest);
}
- void load16SignedExtendTo32(BaseIndex address, RegisterID dest)
+ void load16Signed(BaseIndex address, RegisterID dest)
{
m_assembler.movswl_mr(address.offset, address.base, address.index, address.scale, dest);
}
- void load16SignedExtendTo32(Address address, RegisterID dest)
+ void load16Signed(Address address, RegisterID dest)
{
m_assembler.movswl_mr(address.offset, address.base, dest);
}
@@ -696,13 +684,13 @@ public:
m_assembler.movsd_rr(src, dest);
}
- void loadDouble(TrustedImmPtr address, FPRegisterID dest)
+ void loadDouble(const void* address, FPRegisterID dest)
{
#if CPU(X86)
ASSERT(isSSE2Present());
- m_assembler.movsd_mr(address.m_value, dest);
+ m_assembler.movsd_mr(address, dest);
#else
- move(address, scratchRegister);
+ move(TrustedImmPtr(address), scratchRegister);
loadDouble(scratchRegister, dest);
#endif
}
@@ -921,17 +909,8 @@ public:
m_assembler.cvttsd2si_rr(src, dest);
// If the result is zero, it might have been -0.0, and the double comparison won't catch this!
-#if CPU(X86_64)
- if (negZeroCheck) {
- Jump valueIsNonZero = branchTest32(NonZero, dest);
- m_assembler.movmskpd_rr(src, scratchRegister);
- failureCases.append(branchTest32(NonZero, scratchRegister, TrustedImm32(1)));
- valueIsNonZero.link(this);
- }
-#else
if (negZeroCheck)
failureCases.append(branchTest32(Zero, dest));
-#endif
// Convert the integer result back to float & compare to the original value - if not equal or unordered (NaN) then jump.
convertInt32ToDouble(dest, fpTemp);
@@ -1166,16 +1145,13 @@ public:
return Jump(m_assembler.jCC(x86Condition(cond)));
}
- void test32(ResultCondition, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1))
+ void test32(RegisterID reg, TrustedImm32 mask = TrustedImm32(-1))
{
if (mask.m_value == -1)
m_assembler.testl_rr(reg, reg);
- else if (!(mask.m_value & ~0xff) && reg < X86Registers::esp) { // Using esp and greater as a byte register yields the upper half of the 16 bit registers ax, cx, dx and bx, e.g. esp, register 4, is actually ah.
- if (mask.m_value == 0xff)
- m_assembler.testb_rr(reg, reg);
- else
- m_assembler.testb_i8r(mask.m_value, reg);
- } else
+ else if (!(mask.m_value & ~0xff) && reg < X86Registers::esp) // Using esp and greater as a byte register yields the upper half of the 16 bit registers ax, cx, dx and bx, e.g. esp, register 4, is actually ah.
+ m_assembler.testb_i8r(mask.m_value, reg);
+ else
m_assembler.testl_i32r(mask.m_value, reg);
}
@@ -1186,7 +1162,7 @@ public:
Jump branchTest32(ResultCondition cond, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1))
{
- test32(cond, reg, mask);
+ test32(reg, mask);
return branch(cond);
}
@@ -1490,14 +1466,28 @@ public:
return X86Assembler::maxJumpReplacementSize();
}
-#if ENABLE(MASM_PROBE)
- // Methods required by the MASM_PROBE mechanism as defined in
- // AbstractMacroAssembler.h.
- static void printCPURegisters(CPUState&, int indentation = 0);
- static void printRegister(CPUState&, RegisterID);
- static void printRegister(CPUState&, FPRegisterID);
- void probe(ProbeFunction, void* arg1 = 0, void* arg2 = 0);
-#endif // ENABLE(MASM_PROBE)
+#if USE(MASM_PROBE)
+ struct CPUState {
+ #define DECLARE_REGISTER(_type, _regName) \
+ _type _regName;
+ FOR_EACH_CPU_REGISTER(DECLARE_REGISTER)
+ #undef DECLARE_REGISTER
+ };
+
+ struct ProbeContext;
+ typedef void (*ProbeFunction)(struct ProbeContext*);
+
+ struct ProbeContext {
+ ProbeFunction probeFunction;
+ void* arg1;
+ void* arg2;
+ CPUState cpu;
+
+ void dump(const char* indentation = 0);
+ private:
+ void dumpCPURegisters(const char* indentation);
+ };
+#endif // USE(MASM_PROBE)
protected:
X86Assembler::Condition x86Condition(RelationalCondition cond)
@@ -1577,7 +1567,7 @@ private:
cpuid;
mov flags, edx;
}
-#elif COMPILER(GCC_OR_CLANG)
+#elif COMPILER(GCC)
asm (
"movl $0x1, %%eax;"
"pushl %%ebx;"