summaryrefslogtreecommitdiff
path: root/deps/v8/src/codegen/s390/constants-s390.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/codegen/s390/constants-s390.h')
-rw-r--r--deps/v8/src/codegen/s390/constants-s390.h71
1 files changed, 68 insertions, 3 deletions
diff --git a/deps/v8/src/codegen/s390/constants-s390.h b/deps/v8/src/codegen/s390/constants-s390.h
index edf4eba214..3de1a2f372 100644
--- a/deps/v8/src/codegen/s390/constants-s390.h
+++ b/deps/v8/src/codegen/s390/constants-s390.h
@@ -29,6 +29,8 @@
namespace v8 {
namespace internal {
+// The maximum size of the code range s.t. pc-relative calls are possible
+// between all Code objects in the range.
constexpr size_t kMaxPCRelativeCodeRangeInMB = 4096;
// Number of registers
@@ -39,9 +41,8 @@ const int kNumDoubleRegisters = 16;
const int kNoRegister = -1;
-// Actual value of root register is offset from the root array's start
+// The actual value of the kRootRegister is offset from the IsolateData's start
// to take advantage of negative displacement values.
-// TODO(sigurds): Choose best value.
constexpr int kRootRegisterBias = 128;
// sign-extend the least significant 16-bits of value <imm>
@@ -101,9 +102,73 @@ enum Condition {
mask0xC = 12,
mask0xD = 13,
mask0xE = 14,
- mask0xF = 15
+ mask0xF = 15,
+
+ // Unified cross-platform condition names/aliases.
+ // Do not set unsigned constants equal to their signed variants.
+ // We need to be able to differentiate between signed and unsigned enum
+ // constants in order to emit the right instructions (i.e CmpS64 vs CmpU64).
+ kEqual = eq,
+ kNotEqual = ne,
+ kLessThan = lt,
+ kGreaterThan = gt,
+ kLessThanEqual = le,
+ kGreaterThanEqual = ge,
+ kUnsignedLessThan = 16,
+ kUnsignedGreaterThan = 17,
+ kUnsignedLessThanEqual = 18,
+ kUnsignedGreaterThanEqual = 19,
+ kOverflow = overflow,
+ kNoOverflow = nooverflow,
+ kZero = 20,
+ kNotZero = 21,
};
+inline Condition to_condition(Condition cond) {
+ switch (cond) {
+ case kUnsignedLessThan:
+ return lt;
+ case kUnsignedGreaterThan:
+ return gt;
+ case kUnsignedLessThanEqual:
+ return le;
+ case kUnsignedGreaterThanEqual:
+ return ge;
+ case kZero:
+ return eq;
+ case kNotZero:
+ return ne;
+ default:
+ break;
+ }
+ return cond;
+}
+
+inline bool is_signed(Condition cond) {
+ switch (cond) {
+ case kEqual:
+ case kNotEqual:
+ case kLessThan:
+ case kGreaterThan:
+ case kLessThanEqual:
+ case kGreaterThanEqual:
+ case kOverflow:
+ case kNoOverflow:
+ case kZero:
+ case kNotZero:
+ return true;
+
+ case kUnsignedLessThan:
+ case kUnsignedGreaterThan:
+ case kUnsignedLessThanEqual:
+ case kUnsignedGreaterThanEqual:
+ return false;
+
+ default:
+ UNREACHABLE();
+ }
+}
+
inline Condition NegateCondition(Condition cond) {
DCHECK(cond != al);
switch (cond) {