summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/assembler/MacroAssemblerARM.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/MacroAssemblerARM.h
parente15dd966d523731101f70ccf768bba12435a0208 (diff)
downloadWebKitGtk-tarball-41386e9cb918eed93b3f13648cbef387e371e451.tar.gz
webkitgtk-2.4.9webkitgtk-2.4.9
Diffstat (limited to 'Source/JavaScriptCore/assembler/MacroAssemblerARM.h')
-rw-r--r--Source/JavaScriptCore/assembler/MacroAssemblerARM.h116
1 files changed, 35 insertions, 81 deletions
diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
index 6cda896a3..7eae2ee01 100644
--- a/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
+++ b/Source/JavaScriptCore/assembler/MacroAssemblerARM.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2013, 2014 Apple Inc.
+ * Copyright (C) 2008, 2013 Apple Inc.
* Copyright (C) 2009, 2010 University of Szeged
* All rights reserved.
*
@@ -35,7 +35,7 @@
namespace JSC {
-class MacroAssemblerARM : public AbstractMacroAssembler<ARMAssembler, MacroAssemblerARM> {
+class MacroAssemblerARM : public AbstractMacroAssembler<ARMAssembler> {
static const int DoubleConditionMask = 0x0f;
static const int DoubleConditionBitSpecial = 0x10;
COMPILE_ASSERT(!(DoubleConditionBitSpecial & DoubleConditionMask), DoubleConditionBitSpecial_should_not_interfere_with_ARMAssembler_Condition_codes);
@@ -370,7 +370,7 @@ public:
m_assembler.dataTransfer32(ARMAssembler::LoadUint8, dest, ARMRegisters::S0, 0);
}
- void load8SignedExtendTo32(BaseIndex address, RegisterID dest)
+ void load8Signed(BaseIndex address, RegisterID dest)
{
m_assembler.baseIndexTransfer16(ARMAssembler::LoadInt8, dest, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
@@ -385,7 +385,7 @@ public:
m_assembler.baseIndexTransfer16(ARMAssembler::LoadUint16, dest, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
- void load16SignedExtendTo32(BaseIndex address, RegisterID dest)
+ void load16Signed(BaseIndex address, RegisterID dest)
{
m_assembler.baseIndexTransfer16(ARMAssembler::LoadInt16, dest, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
@@ -414,18 +414,6 @@ public:
load16(address, dest);
}
- void abortWithReason(AbortReason reason)
- {
- move(TrustedImm32(reason), ARMRegisters::S0);
- breakpoint();
- }
-
- void abortWithReason(AbortReason reason, intptr_t misc)
- {
- move(TrustedImm32(misc), ARMRegisters::S1);
- abortWithReason(reason);
- }
-
ConvertibleLoadLabel convertibleLoadPtr(Address address, RegisterID dest)
{
ConvertibleLoadLabel result(this);
@@ -471,23 +459,12 @@ public:
m_assembler.baseIndexTransfer32(ARMAssembler::StoreUint8, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
- void store8(RegisterID src, ImplicitAddress address)
- {
- m_assembler.dtrUp(ARMAssembler::StoreUint8, src, address.base, address.offset);
- }
-
void store8(RegisterID src, const void* address)
{
move(TrustedImmPtr(address), ARMRegisters::S0);
m_assembler.dtrUp(ARMAssembler::StoreUint8, src, ARMRegisters::S0, 0);
}
- void store8(TrustedImm32 imm, ImplicitAddress address)
- {
- move(imm, ARMRegisters::S1);
- store8(ARMRegisters::S1, address);
- }
-
void store8(TrustedImm32 imm, const void* address)
{
move(TrustedImm32(reinterpret_cast<ARMWord>(address)), ARMRegisters::S0);
@@ -540,12 +517,6 @@ public:
m_assembler.pop(dest);
}
- void popPair(RegisterID dest1, RegisterID dest2)
- {
- m_assembler.pop(dest1);
- m_assembler.pop(dest2);
- }
-
void push(RegisterID src)
{
m_assembler.push(src);
@@ -563,12 +534,6 @@ public:
push(ARMRegisters::S0);
}
- void pushPair(RegisterID src1, RegisterID src2)
- {
- m_assembler.push(src2);
- m_assembler.push(src1);
- }
-
void move(TrustedImm32 imm, RegisterID dest)
{
m_assembler.moveImm(imm.m_value, dest);
@@ -942,7 +907,7 @@ public:
void test32(ResultCondition cond, RegisterID reg, TrustedImm32 mask, RegisterID dest)
{
if (mask.m_value == -1)
- m_assembler.tst(reg, reg);
+ m_assembler.cmp(0, reg);
else
m_assembler.tst(reg, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
m_assembler.mov(dest, ARMAssembler::getOp2Byte(0));
@@ -1056,13 +1021,6 @@ public:
return dataLabel;
}
- DataLabel32 moveWithPatch(TrustedImm32 initialValue, RegisterID dest)
- {
- DataLabel32 dataLabel(this);
- m_assembler.ldrUniqueImmediate(dest, static_cast<ARMWord>(initialValue.m_value));
- return dataLabel;
- }
-
Jump branchPtrWithPatch(RelationalCondition cond, RegisterID left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0))
{
ensureSpace(3 * sizeof(ARMWord), 2 * sizeof(ARMWord));
@@ -1080,15 +1038,6 @@ public:
return jump;
}
- Jump branch32WithPatch(RelationalCondition cond, Address left, DataLabel32& dataLabel, TrustedImm32 initialRightValue = TrustedImm32(0))
- {
- load32(left, ARMRegisters::S1);
- ensureSpace(3 * sizeof(ARMWord), 2 * sizeof(ARMWord));
- dataLabel = moveWithPatch(initialRightValue, ARMRegisters::S0);
- Jump jump = branch32(cond, ARMRegisters::S0, ARMRegisters::S1, true);
- return jump;
- }
-
DataLabelPtr storePtrWithPatch(TrustedImmPtr initialValue, ImplicitAddress address)
{
DataLabelPtr dataLabel = moveWithPatch(initialValue, ARMRegisters::S1);
@@ -1133,9 +1082,9 @@ public:
m_assembler.baseIndexTransferFloat(ARMAssembler::LoadDouble, dest, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
- void loadDouble(TrustedImmPtr address, FPRegisterID dest)
+ void loadDouble(const void* address, FPRegisterID dest)
{
- move(TrustedImm32(reinterpret_cast<ARMWord>(address.m_value)), ARMRegisters::S0);
+ move(TrustedImm32(reinterpret_cast<ARMWord>(address)), ARMRegisters::S0);
m_assembler.doubleDtrUp(ARMAssembler::LoadDouble, dest, ARMRegisters::S0, 0);
}
@@ -1154,9 +1103,9 @@ public:
m_assembler.baseIndexTransferFloat(ARMAssembler::StoreDouble, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
- void storeDouble(FPRegisterID src, TrustedImmPtr address)
+ void storeDouble(FPRegisterID src, const void* address)
{
- move(TrustedImm32(reinterpret_cast<ARMWord>(address.m_value)), ARMRegisters::S0);
+ move(TrustedImm32(reinterpret_cast<ARMWord>(address)), ARMRegisters::S0);
m_assembler.dataTransferFloat(ARMAssembler::StoreDouble, src, ARMRegisters::S0, 0);
}
@@ -1184,7 +1133,7 @@ public:
void addDouble(AbsoluteAddress address, FPRegisterID dest)
{
- loadDouble(TrustedImmPtr(address.m_ptr), ARMRegisters::SD0);
+ loadDouble(address.m_ptr, ARMRegisters::SD0);
addDouble(ARMRegisters::SD0, dest);
}
@@ -1398,13 +1347,6 @@ public:
}
static bool canJumpReplacePatchableBranchPtrWithPatch() { return false; }
- static bool canJumpReplacePatchableBranch32WithPatch() { return false; }
-
- static CodeLocationLabel startOfPatchableBranch32WithPatchOnAddress(CodeLocationDataLabel32)
- {
- UNREACHABLE_FOR_PLATFORM();
- return CodeLocationLabel();
- }
static CodeLocationLabel startOfPatchableBranchPtrWithPatchOnAddress(CodeLocationDataLabelPtr)
{
@@ -1422,24 +1364,36 @@ public:
ARMAssembler::revertBranchPtrWithPatch(instructionStart.dataLocation(), reg, reinterpret_cast<uintptr_t>(initialValue) & 0xffff);
}
- static void revertJumpReplacementToPatchableBranch32WithPatch(CodeLocationLabel, Address, int32_t)
- {
- UNREACHABLE_FOR_PLATFORM();
- }
-
static void revertJumpReplacementToPatchableBranchPtrWithPatch(CodeLocationLabel, Address, void*)
{
UNREACHABLE_FOR_PLATFORM();
}
-#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);
+#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);
+ };
+
+ // For details about probe(), see comment in MacroAssemblerX86_64.h.
void probe(ProbeFunction, void* arg1 = 0, void* arg2 = 0);
-#endif // ENABLE(MASM_PROBE)
+#endif // USE(MASM_PROBE)
protected:
ARMAssembler::Condition ARMCondition(RelationalCondition cond)
@@ -1496,7 +1450,7 @@ private:
ARMAssembler::relinkCall(call.dataLocation(), destination.executableAddress());
}
-#if ENABLE(MASM_PROBE)
+#if USE(MASM_PROBE)
inline TrustedImm32 trustedImm32FromPtr(void* ptr)
{
return TrustedImm32(TrustedImmPtr(ptr));