mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
2e8bd89503
This adds support for the predicted forms of branches (+/-). There are three cases to consider: - Branches using a PPC::Predicate code For these, I've added new PPC::Predicate codes corresponding to the BO values for predicted branch forms, and updated insn printing to print them correctly. I've also added new aliases for the asm parser matching the new forms. - bt/bf I've added new aliases matching to gBC etc. - bd(n)z variants I've added new instruction patterns for the predicted forms. In all cases, the new patterns are used for the asm parser only. (The new infrastructure ought to be sufficient to allow use by the compiler too at some point.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184754 91177308-0d34-0410-b5e6-96231b3b80d8
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
//===-- PPCPredicates.h - PPC Branch Predicate Information ------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file describes the PowerPC branch predicates.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TARGET_POWERPC_PPCPREDICATES_H
|
|
#define LLVM_TARGET_POWERPC_PPCPREDICATES_H
|
|
|
|
// GCC #defines PPC on Linux but we use it as our namespace name
|
|
#undef PPC
|
|
|
|
// Generated files will use "namespace PPC". To avoid symbol clash,
|
|
// undefine PPC here. PPC may be predefined on some hosts.
|
|
#undef PPC
|
|
|
|
namespace llvm {
|
|
namespace PPC {
|
|
/// Predicate - These are "(BI << 5) | BO" for various predicates.
|
|
enum Predicate {
|
|
PRED_LT = (0 << 5) | 12,
|
|
PRED_LE = (1 << 5) | 4,
|
|
PRED_EQ = (2 << 5) | 12,
|
|
PRED_GE = (0 << 5) | 4,
|
|
PRED_GT = (1 << 5) | 12,
|
|
PRED_NE = (2 << 5) | 4,
|
|
PRED_UN = (3 << 5) | 12,
|
|
PRED_NU = (3 << 5) | 4,
|
|
PRED_LT_MINUS = (0 << 5) | 14,
|
|
PRED_LE_MINUS = (1 << 5) | 6,
|
|
PRED_EQ_MINUS = (2 << 5) | 14,
|
|
PRED_GE_MINUS = (0 << 5) | 6,
|
|
PRED_GT_MINUS = (1 << 5) | 14,
|
|
PRED_NE_MINUS = (2 << 5) | 6,
|
|
PRED_UN_MINUS = (3 << 5) | 14,
|
|
PRED_NU_MINUS = (3 << 5) | 6,
|
|
PRED_LT_PLUS = (0 << 5) | 15,
|
|
PRED_LE_PLUS = (1 << 5) | 7,
|
|
PRED_EQ_PLUS = (2 << 5) | 15,
|
|
PRED_GE_PLUS = (0 << 5) | 7,
|
|
PRED_GT_PLUS = (1 << 5) | 15,
|
|
PRED_NE_PLUS = (2 << 5) | 7,
|
|
PRED_UN_PLUS = (3 << 5) | 15,
|
|
PRED_NU_PLUS = (3 << 5) | 7
|
|
};
|
|
|
|
/// Invert the specified predicate. != -> ==, < -> >=.
|
|
Predicate InvertPredicate(Predicate Opcode);
|
|
|
|
/// Assume the condition register is set by MI(a,b), return the predicate if
|
|
/// we modify the instructions such that condition register is set by MI(b,a).
|
|
Predicate getSwappedPredicate(Predicate Opcode);
|
|
}
|
|
}
|
|
|
|
#endif
|