| Index: src/compiler/instruction-codes.h
|
| diff --git a/src/compiler/instruction-codes.h b/src/compiler/instruction-codes.h
|
| index cb47be64467ddd1f9f13639fbb567b1799c1cb7a..ee3655735b2477cf3f46d1cfc0daea558e9ad17e 100644
|
| --- a/src/compiler/instruction-codes.h
|
| +++ b/src/compiler/instruction-codes.h
|
| @@ -33,45 +33,55 @@ namespace v8 {
|
| namespace internal {
|
| namespace compiler {
|
|
|
| +// A set of flags describing some properties of the instructions.
|
| +enum ArchOpcodeFlags {
|
| + kNoOpcodeFlags = 0,
|
| + kIsBlockTerminator = 1, // The instruction marks the end of a basic block
|
| + // e.g.: jump and return instructions.
|
| + kHasSideEffect = 2, // The instruction has some side effects (memory
|
| + // store, function call...)
|
| + kIsLoadOperation = 4, // The instruction is a memory load.
|
| +};
|
| +
|
| // Target-specific opcodes that specify which assembly sequence to emit.
|
| // Most opcodes specify a single instruction.
|
| -#define ARCH_OPCODE_LIST(V) \
|
| - V(ArchCallCodeObject) \
|
| - V(ArchTailCallCodeObject) \
|
| - V(ArchCallJSFunction) \
|
| - V(ArchTailCallJSFunction) \
|
| - V(ArchPrepareCallCFunction) \
|
| - V(ArchCallCFunction) \
|
| - V(ArchJmp) \
|
| - V(ArchLookupSwitch) \
|
| - V(ArchTableSwitch) \
|
| - V(ArchNop) \
|
| - V(ArchDeoptimize) \
|
| - V(ArchRet) \
|
| - V(ArchStackPointer) \
|
| - V(ArchFramePointer) \
|
| - V(ArchTruncateDoubleToI) \
|
| - V(CheckedLoadInt8) \
|
| - V(CheckedLoadUint8) \
|
| - V(CheckedLoadInt16) \
|
| - V(CheckedLoadUint16) \
|
| - V(CheckedLoadWord32) \
|
| - V(CheckedLoadWord64) \
|
| - V(CheckedLoadFloat32) \
|
| - V(CheckedLoadFloat64) \
|
| - V(CheckedStoreWord8) \
|
| - V(CheckedStoreWord16) \
|
| - V(CheckedStoreWord32) \
|
| - V(CheckedStoreWord64) \
|
| - V(CheckedStoreFloat32) \
|
| - V(CheckedStoreFloat64) \
|
| +#define ARCH_OPCODE_LIST(V) \
|
| + V(ArchCallCodeObject, kHasSideEffect) \
|
| + V(ArchTailCallCodeObject, kHasSideEffect | kIsBlockTerminator) \
|
| + V(ArchCallJSFunction, kHasSideEffect) \
|
| + V(ArchTailCallJSFunction, kHasSideEffect | kIsBlockTerminator) \
|
| + V(ArchPrepareCallCFunction, kHasSideEffect) \
|
| + V(ArchCallCFunction, kHasSideEffect) \
|
| + V(ArchJmp, kIsBlockTerminator) \
|
| + V(ArchLookupSwitch, kIsBlockTerminator) \
|
| + V(ArchTableSwitch, kIsBlockTerminator) \
|
| + V(ArchNop, kNoOpcodeFlags) \
|
| + V(ArchDeoptimize, kNoOpcodeFlags) \
|
| + V(ArchRet, kIsBlockTerminator) \
|
| + V(ArchStackPointer, kNoOpcodeFlags) \
|
| + V(ArchFramePointer, kNoOpcodeFlags) \
|
| + V(ArchTruncateDoubleToI, kNoOpcodeFlags) \
|
| + V(CheckedLoadInt8, kIsLoadOperation) \
|
| + V(CheckedLoadUint8, kIsLoadOperation) \
|
| + V(CheckedLoadInt16, kIsLoadOperation) \
|
| + V(CheckedLoadUint16, kIsLoadOperation) \
|
| + V(CheckedLoadWord32, kIsLoadOperation) \
|
| + V(CheckedLoadWord64, kIsLoadOperation) \
|
| + V(CheckedLoadFloat32, kIsLoadOperation) \
|
| + V(CheckedLoadFloat64, kIsLoadOperation) \
|
| + V(CheckedStoreWord8, kHasSideEffect) \
|
| + V(CheckedStoreWord16, kHasSideEffect) \
|
| + V(CheckedStoreWord32, kHasSideEffect) \
|
| + V(CheckedStoreWord64, kHasSideEffect) \
|
| + V(CheckedStoreFloat32, kHasSideEffect) \
|
| + V(CheckedStoreFloat64, kHasSideEffect) \
|
| TARGET_ARCH_OPCODE_LIST(V)
|
|
|
| enum ArchOpcode {
|
| -#define DECLARE_ARCH_OPCODE(Name) k##Name,
|
| +#define DECLARE_ARCH_OPCODE(Name, Flags) k##Name,
|
| ARCH_OPCODE_LIST(DECLARE_ARCH_OPCODE)
|
| #undef DECLARE_ARCH_OPCODE
|
| -#define COUNT_ARCH_OPCODE(Name) +1
|
| +#define COUNT_ARCH_OPCODE(Name, Flags) +1
|
| kLastArchOpcode = -1 ARCH_OPCODE_LIST(COUNT_ARCH_OPCODE)
|
| #undef COUNT_ARCH_OPCODE
|
| };
|
|
|