24eafd67d3
TEST=ci Change-Id: Ibe1ede1bc1c4e044285ee3b3f75ca138d7596e8a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/384682 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
79 lines
2.7 KiB
C++
79 lines
2.7 KiB
C++
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "vm/constants_kbc.h"
|
|
|
|
namespace dart {
|
|
|
|
static const intptr_t kInstructionSize0 = 1;
|
|
static const intptr_t kInstructionSizeA = 2;
|
|
static const intptr_t kInstructionSizeD = 2;
|
|
static const intptr_t kInstructionSizeWideD = 5;
|
|
static const intptr_t kInstructionSizeX = 2;
|
|
static const intptr_t kInstructionSizeWideX = 5;
|
|
static const intptr_t kInstructionSizeT = 2;
|
|
static const intptr_t kInstructionSizeWideT = 4;
|
|
static const intptr_t kInstructionSizeA_E = 3;
|
|
static const intptr_t kInstructionSizeWideA_E = 6;
|
|
static const intptr_t kInstructionSizeA_Y = 3;
|
|
static const intptr_t kInstructionSizeWideA_Y = 6;
|
|
static const intptr_t kInstructionSizeD_F = 3;
|
|
static const intptr_t kInstructionSizeWideD_F = 6;
|
|
static const intptr_t kInstructionSizeA_B_C = 4;
|
|
|
|
const intptr_t KernelBytecode::kInstructionSize[] = {
|
|
#define SIZE_ORDN(encoding) kInstructionSize##encoding
|
|
#define SIZE_WIDE(encoding) kInstructionSizeWide##encoding
|
|
#define SIZE_RESV(encoding) SIZE_ORDN(encoding)
|
|
#define SIZE(name, encoding, kind, op1, op2, op3) SIZE_##kind(encoding),
|
|
KERNEL_BYTECODES_LIST(SIZE)
|
|
#undef SIZE_ORDN
|
|
#undef SIZE_WIDE
|
|
#undef SIZE_RESV
|
|
#undef SIZE
|
|
};
|
|
|
|
static const KBCInstr kVMInternal_ImplicitConstructorClosureInstructions[] = {
|
|
KernelBytecode::kVMInternal_ImplicitConstructorClosure,
|
|
0,
|
|
0,
|
|
KernelBytecode::kPush,
|
|
0,
|
|
KernelBytecode::kReturnTOS,
|
|
};
|
|
|
|
static const KBCInstr
|
|
kVMInternal_ImplicitConstructorClosure_WideInstructions[] = {
|
|
KernelBytecode::kTrap,
|
|
};
|
|
|
|
#define DECLARE_INSTRUCTIONS(name, fmt, kind, fmta, fmtb, fmtc) \
|
|
static const KBCInstr k##name##Instructions[] = { \
|
|
KernelBytecode::k##name, \
|
|
KernelBytecode::kReturnTOS, \
|
|
};
|
|
INTERNAL_KERNEL_BYTECODES_WITH_DEFAULT_CODE(DECLARE_INSTRUCTIONS)
|
|
#undef DECLARE_INSTRUCTIONS
|
|
|
|
void KernelBytecode::GetVMInternalBytecodeInstructions(
|
|
Opcode opcode,
|
|
const KBCInstr** instructions,
|
|
intptr_t* instructions_size) {
|
|
switch (opcode) {
|
|
#define CASE(name, fmt, kind, fmta, fmtb, fmtc) \
|
|
case k##name: \
|
|
*instructions = k##name##Instructions; \
|
|
*instructions_size = sizeof(k##name##Instructions); \
|
|
return;
|
|
|
|
INTERNAL_KERNEL_BYTECODES_LIST(CASE)
|
|
#undef CASE
|
|
|
|
default:
|
|
UNREACHABLE();
|
|
}
|
|
}
|
|
|
|
} // namespace dart
|