diff options
Diffstat (limited to 'deps/v8/src/codegen/s390/constants-s390.h')
-rw-r--r-- | deps/v8/src/codegen/s390/constants-s390.h | 71 |
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) { |