Files
sdk/runtime/vm/compiler/assembler/assembler.h
T
Alexander Markov 0ca1ff2281 [vm/compiler] Support int32, uint32 unboxed representations in comparisons
TEST=runtime/tests/vm/dart/multiple_uint32_comparisons_il_test.dart
Fixes https://github.com/dart-lang/sdk/issues/56839

Change-Id: Ib4e0372e8def991d34b6b045d3acf62839296443
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/393905
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2024-11-11 14:17:09 +00:00

63 lines
2.0 KiB
C++

// Copyright (c) 2012, 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.
#ifndef RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_H_
#define RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_H_
#if defined(DART_PRECOMPILED_RUNTIME)
#error "AOT runtime should not use compiler sources (including header files)"
#endif // defined(DART_PRECOMPILED_RUNTIME)
#include "platform/assert.h"
#include "vm/allocation.h"
#include "vm/compiler/assembler/object_pool_builder.h"
#include "vm/compiler/runtime_api.h"
#include "vm/globals.h"
#include "vm/growable_array.h"
#include "vm/hash_map.h"
#if defined(TARGET_ARCH_IA32)
#include "vm/compiler/assembler/assembler_ia32.h"
#elif defined(TARGET_ARCH_X64)
#include "vm/compiler/assembler/assembler_x64.h"
#elif defined(TARGET_ARCH_ARM)
#include "vm/compiler/assembler/assembler_arm.h"
#elif defined(TARGET_ARCH_ARM64)
#include "vm/compiler/assembler/assembler_arm64.h"
#elif defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
#include "vm/compiler/assembler/assembler_riscv.h"
#else
#error Unknown architecture.
#endif
namespace dart {
// Convert comparison Token::Kind to GPR comparison condition.
static inline Condition TokenKindToIntCondition(Token::Kind kind,
bool is_unsigned) {
// Use platform-independent condition names
// declared in constant_<arch>.h on all platforms.
switch (kind) {
case Token::kEQ:
return EQUAL;
case Token::kNE:
return NOT_EQUAL;
case Token::kLT:
return is_unsigned ? UNSIGNED_LESS : LESS;
case Token::kGT:
return is_unsigned ? UNSIGNED_GREATER : GREATER;
case Token::kLTE:
return is_unsigned ? UNSIGNED_LESS_EQUAL : LESS_EQUAL;
case Token::kGTE:
return is_unsigned ? UNSIGNED_GREATER_EQUAL : GREATER_EQUAL;
default:
UNREACHABLE();
return OVERFLOW;
}
}
} // namespace dart
#endif // RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_H_