Home | History | Annotate | Download | only in s390
      1 // Copyright 2014 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Declares a Simulator for S390 instructions if we are not generating a native
      6 // S390 binary. This Simulator allows us to run and debug S390 code generation
      7 // on regular desktop machines.
      8 // V8 calls into generated code via the GeneratedCode wrapper,
      9 // which will start execution in the Simulator or forwards to the real entry
     10 // on a S390 hardware platform.
     11 
     12 #ifndef V8_S390_SIMULATOR_S390_H_
     13 #define V8_S390_SIMULATOR_S390_H_
     14 
     15 #include "src/allocation.h"
     16 
     17 #if defined(USE_SIMULATOR)
     18 // Running with a simulator.
     19 
     20 #include "src/assembler.h"
     21 #include "src/base/hashmap.h"
     22 #include "src/s390/constants-s390.h"
     23 #include "src/simulator-base.h"
     24 
     25 namespace v8 {
     26 namespace internal {
     27 
     28 class CachePage {
     29  public:
     30   static const int LINE_VALID = 0;
     31   static const int LINE_INVALID = 1;
     32 
     33   static const int kPageShift = 12;
     34   static const int kPageSize = 1 << kPageShift;
     35   static const int kPageMask = kPageSize - 1;
     36   static const int kLineShift = 2;  // The cache line is only 4 bytes right now.
     37   static const int kLineLength = 1 << kLineShift;
     38   static const int kLineMask = kLineLength - 1;
     39 
     40   CachePage() { memset(&validity_map_, LINE_INVALID, sizeof(validity_map_)); }
     41 
     42   char* ValidityByte(int offset) {
     43     return &validity_map_[offset >> kLineShift];
     44   }
     45 
     46   char* CachedData(int offset) { return &data_[offset]; }
     47 
     48  private:
     49   char data_[kPageSize];  // The cached data.
     50   static const int kValidityMapSize = kPageSize >> kLineShift;
     51   char validity_map_[kValidityMapSize];  // One byte per line.
     52 };
     53 
     54 class Simulator : public SimulatorBase {
     55  public:
     56   friend class S390Debugger;
     57   enum Register {
     58     no_reg = -1,
     59     r0 = 0,
     60     r1 = 1,
     61     r2 = 2,
     62     r3 = 3,
     63     r4 = 4,
     64     r5 = 5,
     65     r6 = 6,
     66     r7 = 7,
     67     r8 = 8,
     68     r9 = 9,
     69     r10 = 10,
     70     r11 = 11,
     71     r12 = 12,
     72     r13 = 13,
     73     r14 = 14,
     74     r15 = 15,
     75     fp = r11,
     76     ip = r12,
     77     cp = r13,
     78     ra = r14,
     79     sp = r15,  // name aliases
     80     kNumGPRs = 16,
     81     d0 = 0,
     82     d1,
     83     d2,
     84     d3,
     85     d4,
     86     d5,
     87     d6,
     88     d7,
     89     d8,
     90     d9,
     91     d10,
     92     d11,
     93     d12,
     94     d13,
     95     d14,
     96     d15,
     97     kNumFPRs = 16
     98   };
     99 
    100   explicit Simulator(Isolate* isolate);
    101   ~Simulator();
    102 
    103   // The currently executing Simulator instance. Potentially there can be one
    104   // for each native thread.
    105   static Simulator* current(v8::internal::Isolate* isolate);
    106 
    107   // Accessors for register state.
    108   void set_register(int reg, uint64_t value);
    109   uint64_t get_register(int reg) const;
    110   template <typename T>
    111   T get_low_register(int reg) const;
    112   template <typename T>
    113   T get_high_register(int reg) const;
    114   void set_low_register(int reg, uint32_t value);
    115   void set_high_register(int reg, uint32_t value);
    116 
    117   double get_double_from_register_pair(int reg);
    118   void set_d_register_from_double(int dreg, const double dbl) {
    119     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    120     *bit_cast<double*>(&fp_registers_[dreg]) = dbl;
    121   }
    122 
    123   double get_double_from_d_register(int dreg) {
    124     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    125     return *bit_cast<double*>(&fp_registers_[dreg]);
    126   }
    127   void set_d_register(int dreg, int64_t value) {
    128     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    129     fp_registers_[dreg] = value;
    130   }
    131   int64_t get_d_register(int dreg) {
    132     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    133     return fp_registers_[dreg];
    134   }
    135 
    136   void set_d_register_from_float32(int dreg, const float f) {
    137     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    138 
    139     int32_t f_int = *bit_cast<int32_t*>(&f);
    140     int64_t finalval = static_cast<int64_t>(f_int) << 32;
    141     set_d_register(dreg, finalval);
    142   }
    143 
    144   float get_float32_from_d_register(int dreg) {
    145     DCHECK(dreg >= 0 && dreg < kNumFPRs);
    146 
    147     int64_t regval = get_d_register(dreg) >> 32;
    148     int32_t regval32 = static_cast<int32_t>(regval);
    149     return *bit_cast<float*>(&regval32);
    150   }
    151 
    152   // Special case of set_register and get_register to access the raw PC value.
    153   void set_pc(intptr_t value);
    154   intptr_t get_pc() const;
    155 
    156   Address get_sp() const { return static_cast<Address>(get_register(sp)); }
    157 
    158   // Accessor to the internal simulator stack area.
    159   uintptr_t StackLimit(uintptr_t c_limit) const;
    160 
    161   // Executes S390 instructions until the PC reaches end_sim_pc.
    162   void Execute();
    163 
    164   template <typename Return, typename... Args>
    165   Return Call(Address entry, Args... args) {
    166     return VariadicCall<Return>(this, &Simulator::CallImpl, entry, args...);
    167   }
    168 
    169   // Alternative: call a 2-argument double function.
    170   void CallFP(Address entry, double d0, double d1);
    171   int32_t CallFPReturnsInt(Address entry, double d0, double d1);
    172   double CallFPReturnsDouble(Address entry, double d0, double d1);
    173 
    174   // Push an address onto the JS stack.
    175   uintptr_t PushAddress(uintptr_t address);
    176 
    177   // Pop an address from the JS stack.
    178   uintptr_t PopAddress();
    179 
    180   // Debugger input.
    181   void set_last_debugger_input(char* input);
    182   char* last_debugger_input() { return last_debugger_input_; }
    183 
    184   // Redirection support.
    185   static void SetRedirectInstruction(Instruction* instruction);
    186 
    187   // ICache checking.
    188   static bool ICacheMatch(void* one, void* two);
    189   static void FlushICache(base::CustomMatcherHashMap* i_cache, void* start,
    190                           size_t size);
    191 
    192   // Returns true if pc register contains one of the 'special_values' defined
    193   // below (bad_lr, end_sim_pc).
    194   bool has_bad_pc() const;
    195 
    196  private:
    197   enum special_values {
    198     // Known bad pc value to ensure that the simulator does not execute
    199     // without being properly setup.
    200     bad_lr = -1,
    201     // A pc value used to signal the simulator to stop execution.  Generally
    202     // the lr is set to this value on transition from native C code to
    203     // simulated execution, so that the simulator can "return" to the native
    204     // C code.
    205     end_sim_pc = -2
    206   };
    207 
    208   intptr_t CallImpl(Address entry, int argument_count,
    209                     const intptr_t* arguments);
    210 
    211   // Unsupported instructions use Format to print an error and stop execution.
    212   void Format(Instruction* instr, const char* format);
    213 
    214   // Helper functions to set the conditional flags in the architecture state.
    215   bool CarryFrom(int32_t left, int32_t right, int32_t carry = 0);
    216   bool BorrowFrom(int32_t left, int32_t right);
    217   template <typename T1>
    218   inline bool OverflowFromSigned(T1 alu_out, T1 left, T1 right, bool addition);
    219 
    220   // Helper functions to decode common "addressing" modes
    221   int32_t GetShiftRm(Instruction* instr, bool* carry_out);
    222   int32_t GetImm(Instruction* instr, bool* carry_out);
    223   void ProcessPUW(Instruction* instr, int num_regs, int operand_size,
    224                   intptr_t* start_address, intptr_t* end_address);
    225   void HandleRList(Instruction* instr, bool load);
    226   void HandleVList(Instruction* inst);
    227   void SoftwareInterrupt(Instruction* instr);
    228 
    229   // Stop helper functions.
    230   inline bool isStopInstruction(Instruction* instr);
    231   inline bool isWatchedStop(uint32_t bkpt_code);
    232   inline bool isEnabledStop(uint32_t bkpt_code);
    233   inline void EnableStop(uint32_t bkpt_code);
    234   inline void DisableStop(uint32_t bkpt_code);
    235   inline void IncreaseStopCounter(uint32_t bkpt_code);
    236   void PrintStopInfo(uint32_t code);
    237 
    238   // Byte Reverse
    239   inline int16_t ByteReverse(int16_t hword);
    240   inline int32_t ByteReverse(int32_t word);
    241   inline int64_t ByteReverse(int64_t dword);
    242 
    243   // Read and write memory.
    244   inline uint8_t ReadBU(intptr_t addr);
    245   inline int8_t ReadB(intptr_t addr);
    246   inline void WriteB(intptr_t addr, uint8_t value);
    247   inline void WriteB(intptr_t addr, int8_t value);
    248 
    249   inline uint16_t ReadHU(intptr_t addr, Instruction* instr);
    250   inline int16_t ReadH(intptr_t addr, Instruction* instr);
    251   // Note: Overloaded on the sign of the value.
    252   inline void WriteH(intptr_t addr, uint16_t value, Instruction* instr);
    253   inline void WriteH(intptr_t addr, int16_t value, Instruction* instr);
    254 
    255   inline uint32_t ReadWU(intptr_t addr, Instruction* instr);
    256   inline int32_t ReadW(intptr_t addr, Instruction* instr);
    257   inline int64_t ReadW64(intptr_t addr, Instruction* instr);
    258   inline void WriteW(intptr_t addr, uint32_t value, Instruction* instr);
    259   inline void WriteW(intptr_t addr, int32_t value, Instruction* instr);
    260 
    261   inline int64_t ReadDW(intptr_t addr);
    262   inline double ReadDouble(intptr_t addr);
    263   inline float ReadFloat(intptr_t addr);
    264   inline void WriteDW(intptr_t addr, int64_t value);
    265 
    266   // S390
    267   void Trace(Instruction* instr);
    268 
    269   // Used by the CL**BR instructions.
    270   template <typename T1, typename T2>
    271   void SetS390RoundConditionCode(T1 r2_val, T2 max, T2 min) {
    272     condition_reg_ = 0;
    273     double r2_dval = static_cast<double>(r2_val);
    274     double dbl_min = static_cast<double>(min);
    275     double dbl_max = static_cast<double>(max);
    276 
    277     if (r2_dval == 0.0)
    278       condition_reg_ = 8;
    279     else if (r2_dval < 0.0 && r2_dval >= dbl_min && std::isfinite(r2_dval))
    280       condition_reg_ = 4;
    281     else if (r2_dval > 0.0 && r2_dval <= dbl_max && std::isfinite(r2_dval))
    282       condition_reg_ = 2;
    283     else
    284       condition_reg_ = 1;
    285   }
    286 
    287   template <typename T1>
    288   void SetS390RoundConditionCode(T1 r2_val, int64_t max, int64_t min) {
    289     condition_reg_ = 0;
    290     double r2_dval = static_cast<double>(r2_val);
    291     double dbl_min = static_cast<double>(min);
    292     double dbl_max = static_cast<double>(max);
    293 
    294     // Note that the IEEE 754 floating-point representations (both 32 and
    295     // 64 bit) cannot exactly represent INT64_MAX. The closest it can get
    296     // is INT64_max + 1. IEEE 754 FP can, though, represent INT64_MIN
    297     // exactly.
    298 
    299     // This is not an issue for INT32, as IEEE754 64-bit can represent
    300     // INT32_MAX and INT32_MIN with exact precision.
    301 
    302     if (r2_dval == 0.0)
    303       condition_reg_ = 8;
    304     else if (r2_dval < 0.0 && r2_dval >= dbl_min && std::isfinite(r2_dval))
    305       condition_reg_ = 4;
    306     else if (r2_dval > 0.0 && r2_dval < dbl_max && std::isfinite(r2_dval))
    307       condition_reg_ = 2;
    308     else
    309       condition_reg_ = 1;
    310   }
    311 
    312   // Used by the CL**BR instructions.
    313   template <typename T1, typename T2, typename T3>
    314   void SetS390ConvertConditionCode(T1 src, T2 dst, T3 max) {
    315     condition_reg_ = 0;
    316     if (src == static_cast<T1>(0.0)) {
    317       condition_reg_ |= 8;
    318     } else if (src < static_cast<T1>(0.0) && static_cast<T2>(src) == 0 &&
    319                std::isfinite(src)) {
    320       condition_reg_ |= 4;
    321     } else if (src > static_cast<T1>(0.0) && std::isfinite(src) &&
    322                src < static_cast<T1>(max)) {
    323       condition_reg_ |= 2;
    324     } else {
    325       condition_reg_ |= 1;
    326     }
    327   }
    328 
    329   template <typename T>
    330   void SetS390ConditionCode(T lhs, T rhs) {
    331     condition_reg_ = 0;
    332     if (lhs == rhs) {
    333       condition_reg_ |= CC_EQ;
    334     } else if (lhs < rhs) {
    335       condition_reg_ |= CC_LT;
    336     } else if (lhs > rhs) {
    337       condition_reg_ |= CC_GT;
    338     }
    339 
    340     // We get down here only for floating point
    341     // comparisons and the values are unordered
    342     // i.e. NaN
    343     if (condition_reg_ == 0) condition_reg_ = unordered;
    344   }
    345 
    346   // Used by arithmetic operations that use carry.
    347   template <typename T>
    348   void SetS390ConditionCodeCarry(T result, bool overflow) {
    349     condition_reg_ = 0;
    350     bool zero_result = (result == static_cast<T>(0));
    351     if (zero_result && !overflow) {
    352       condition_reg_ |= 8;
    353     } else if (!zero_result && !overflow) {
    354       condition_reg_ |= 4;
    355     } else if (zero_result && overflow) {
    356       condition_reg_ |= 2;
    357     } else if (!zero_result && overflow) {
    358       condition_reg_ |= 1;
    359     }
    360     if (condition_reg_ == 0) UNREACHABLE();
    361   }
    362 
    363   bool isNaN(double value) { return (value != value); }
    364 
    365   // Set the condition code for bitwise operations
    366   // CC0 is set if value == 0.
    367   // CC1 is set if value != 0.
    368   // CC2/CC3 are not set.
    369   template <typename T>
    370   void SetS390BitWiseConditionCode(T value) {
    371     condition_reg_ = 0;
    372 
    373     if (value == 0)
    374       condition_reg_ |= CC_EQ;
    375     else
    376       condition_reg_ |= CC_LT;
    377   }
    378 
    379   void SetS390OverflowCode(bool isOF) {
    380     if (isOF) condition_reg_ = CC_OF;
    381   }
    382 
    383   bool TestConditionCode(Condition mask) {
    384     // Check for unconditional branch
    385     if (mask == 0xf) return true;
    386 
    387     return (condition_reg_ & mask) != 0;
    388   }
    389 
    390   // Executes one instruction.
    391   void ExecuteInstruction(Instruction* instr, bool auto_incr_pc = true);
    392 
    393   // ICache.
    394   static void CheckICache(base::CustomMatcherHashMap* i_cache,
    395                           Instruction* instr);
    396   static void FlushOnePage(base::CustomMatcherHashMap* i_cache, intptr_t start,
    397                            int size);
    398   static CachePage* GetCachePage(base::CustomMatcherHashMap* i_cache,
    399                                  void* page);
    400 
    401   // Handle arguments and return value for runtime FP functions.
    402   void GetFpArgs(double* x, double* y, intptr_t* z);
    403   void SetFpResult(const double& result);
    404   void TrashCallerSaveRegisters();
    405 
    406   void CallInternal(Address entry, int reg_arg_count = 3);
    407 
    408   // Architecture state.
    409   // On z9 and higher and supported Linux on z Systems platforms, all registers
    410   // are 64-bit, even in 31-bit mode.
    411   uint64_t registers_[kNumGPRs];
    412   int64_t fp_registers_[kNumFPRs];
    413 
    414   // Condition Code register. In S390, the last 4 bits are used.
    415   int32_t condition_reg_;
    416   // Special register to track PC.
    417   intptr_t special_reg_pc_;
    418 
    419   // Simulator support.
    420   char* stack_;
    421   static const size_t stack_protection_size_ = 256 * kPointerSize;
    422   bool pc_modified_;
    423   int64_t icount_;
    424 
    425   // Debugger input.
    426   char* last_debugger_input_;
    427 
    428   // Registered breakpoints.
    429   Instruction* break_pc_;
    430   Instr break_instr_;
    431 
    432   v8::internal::Isolate* isolate_;
    433 
    434   // A stop is watched if its code is less than kNumOfWatchedStops.
    435   // Only watched stops support enabling/disabling and the counter feature.
    436   static const uint32_t kNumOfWatchedStops = 256;
    437 
    438   // Breakpoint is disabled if bit 31 is set.
    439   static const uint32_t kStopDisabledBit = 1 << 31;
    440 
    441   // A stop is enabled, meaning the simulator will stop when meeting the
    442   // instruction, if bit 31 of watched_stops_[code].count is unset.
    443   // The value watched_stops_[code].count & ~(1 << 31) indicates how many times
    444   // the breakpoint was hit or gone through.
    445   struct StopCountAndDesc {
    446     uint32_t count;
    447     char* desc;
    448   };
    449   StopCountAndDesc watched_stops_[kNumOfWatchedStops];
    450   void DebugStart();
    451 
    452   int DecodeInstructionOriginal(Instruction* instr);
    453   int DecodeInstruction(Instruction* instr);
    454   int Evaluate_Unknown(Instruction* instr);
    455 #define MAX_NUM_OPCODES (1 << 16)
    456   typedef int (Simulator::*EvaluateFuncType)(Instruction*);
    457 
    458   static EvaluateFuncType EvalTable[MAX_NUM_OPCODES];
    459   static void EvalTableInit();
    460 
    461 #define EVALUATE(name) int Evaluate_##name(Instruction* instr)
    462 #define EVALUATE_VRR_INSTRUCTIONS(name, op_name, op_value) EVALUATE(op_name);
    463   S390_VRR_C_OPCODE_LIST(EVALUATE_VRR_INSTRUCTIONS)
    464   S390_VRR_A_OPCODE_LIST(EVALUATE_VRR_INSTRUCTIONS)
    465 #undef EVALUATE_VRR_INSTRUCTIONS
    466 
    467   EVALUATE(DUMY);
    468   EVALUATE(BKPT);
    469   EVALUATE(SPM);
    470   EVALUATE(BALR);
    471   EVALUATE(BCTR);
    472   EVALUATE(BCR);
    473   EVALUATE(SVC);
    474   EVALUATE(BSM);
    475   EVALUATE(BASSM);
    476   EVALUATE(BASR);
    477   EVALUATE(MVCL);
    478   EVALUATE(CLCL);
    479   EVALUATE(LPR);
    480   EVALUATE(LNR);
    481   EVALUATE(LTR);
    482   EVALUATE(LCR);
    483   EVALUATE(NR);
    484   EVALUATE(CLR);
    485   EVALUATE(OR);
    486   EVALUATE(XR);
    487   EVALUATE(LR);
    488   EVALUATE(CR);
    489   EVALUATE(AR);
    490   EVALUATE(SR);
    491   EVALUATE(MR);
    492   EVALUATE(DR);
    493   EVALUATE(ALR);
    494   EVALUATE(SLR);
    495   EVALUATE(LDR);
    496   EVALUATE(CDR);
    497   EVALUATE(LER);
    498   EVALUATE(STH);
    499   EVALUATE(LA);
    500   EVALUATE(STC);
    501   EVALUATE(IC_z);
    502   EVALUATE(EX);
    503   EVALUATE(BAL);
    504   EVALUATE(BCT);
    505   EVALUATE(BC);
    506   EVALUATE(LH);
    507   EVALUATE(CH);
    508   EVALUATE(AH);
    509   EVALUATE(SH);
    510   EVALUATE(MH);
    511   EVALUATE(BAS);
    512   EVALUATE(CVD);
    513   EVALUATE(CVB);
    514   EVALUATE(ST);
    515   EVALUATE(LAE);
    516   EVALUATE(N);
    517   EVALUATE(CL);
    518   EVALUATE(O);
    519   EVALUATE(X);
    520   EVALUATE(L);
    521   EVALUATE(C);
    522   EVALUATE(A);
    523   EVALUATE(S);
    524   EVALUATE(M);
    525   EVALUATE(D);
    526   EVALUATE(AL);
    527   EVALUATE(SL);
    528   EVALUATE(STD);
    529   EVALUATE(LD);
    530   EVALUATE(CD);
    531   EVALUATE(STE);
    532   EVALUATE(MS);
    533   EVALUATE(LE);
    534   EVALUATE(BRXH);
    535   EVALUATE(BRXLE);
    536   EVALUATE(BXH);
    537   EVALUATE(BXLE);
    538   EVALUATE(SRL);
    539   EVALUATE(SLL);
    540   EVALUATE(SRA);
    541   EVALUATE(SLA);
    542   EVALUATE(SRDL);
    543   EVALUATE(SLDL);
    544   EVALUATE(SRDA);
    545   EVALUATE(SLDA);
    546   EVALUATE(STM);
    547   EVALUATE(TM);
    548   EVALUATE(MVI);
    549   EVALUATE(TS);
    550   EVALUATE(NI);
    551   EVALUATE(CLI);
    552   EVALUATE(OI);
    553   EVALUATE(XI);
    554   EVALUATE(LM);
    555   EVALUATE(CS);
    556   EVALUATE(MVCLE);
    557   EVALUATE(CLCLE);
    558   EVALUATE(MC);
    559   EVALUATE(CDS);
    560   EVALUATE(STCM);
    561   EVALUATE(ICM);
    562   EVALUATE(BPRP);
    563   EVALUATE(BPP);
    564   EVALUATE(TRTR);
    565   EVALUATE(MVN);
    566   EVALUATE(MVC);
    567   EVALUATE(MVZ);
    568   EVALUATE(NC);
    569   EVALUATE(CLC);
    570   EVALUATE(OC);
    571   EVALUATE(XC);
    572   EVALUATE(MVCP);
    573   EVALUATE(TR);
    574   EVALUATE(TRT);
    575   EVALUATE(ED);
    576   EVALUATE(EDMK);
    577   EVALUATE(PKU);
    578   EVALUATE(UNPKU);
    579   EVALUATE(MVCIN);
    580   EVALUATE(PKA);
    581   EVALUATE(UNPKA);
    582   EVALUATE(PLO);
    583   EVALUATE(LMD);
    584   EVALUATE(SRP);
    585   EVALUATE(MVO);
    586   EVALUATE(PACK);
    587   EVALUATE(UNPK);
    588   EVALUATE(ZAP);
    589   EVALUATE(AP);
    590   EVALUATE(SP);
    591   EVALUATE(MP);
    592   EVALUATE(DP);
    593   EVALUATE(UPT);
    594   EVALUATE(PFPO);
    595   EVALUATE(IIHH);
    596   EVALUATE(IIHL);
    597   EVALUATE(IILH);
    598   EVALUATE(IILL);
    599   EVALUATE(NIHH);
    600   EVALUATE(NIHL);
    601   EVALUATE(NILH);
    602   EVALUATE(NILL);
    603   EVALUATE(OIHH);
    604   EVALUATE(OIHL);
    605   EVALUATE(OILH);
    606   EVALUATE(OILL);
    607   EVALUATE(LLIHH);
    608   EVALUATE(LLIHL);
    609   EVALUATE(LLILH);
    610   EVALUATE(LLILL);
    611   EVALUATE(TMLH);
    612   EVALUATE(TMLL);
    613   EVALUATE(TMHH);
    614   EVALUATE(TMHL);
    615   EVALUATE(BRC);
    616   EVALUATE(BRAS);
    617   EVALUATE(BRCT);
    618   EVALUATE(BRCTG);
    619   EVALUATE(LHI);
    620   EVALUATE(LGHI);
    621   EVALUATE(AHI);
    622   EVALUATE(AGHI);
    623   EVALUATE(MHI);
    624   EVALUATE(MGHI);
    625   EVALUATE(CHI);
    626   EVALUATE(CGHI);
    627   EVALUATE(LARL);
    628   EVALUATE(LGFI);
    629   EVALUATE(BRCL);
    630   EVALUATE(BRASL);
    631   EVALUATE(XIHF);
    632   EVALUATE(XILF);
    633   EVALUATE(IIHF);
    634   EVALUATE(IILF);
    635   EVALUATE(NIHF);
    636   EVALUATE(NILF);
    637   EVALUATE(OIHF);
    638   EVALUATE(OILF);
    639   EVALUATE(LLIHF);
    640   EVALUATE(LLILF);
    641   EVALUATE(MSGFI);
    642   EVALUATE(MSFI);
    643   EVALUATE(SLGFI);
    644   EVALUATE(SLFI);
    645   EVALUATE(AGFI);
    646   EVALUATE(AFI);
    647   EVALUATE(ALGFI);
    648   EVALUATE(ALFI);
    649   EVALUATE(CGFI);
    650   EVALUATE(CFI);
    651   EVALUATE(CLGFI);
    652   EVALUATE(CLFI);
    653   EVALUATE(LLHRL);
    654   EVALUATE(LGHRL);
    655   EVALUATE(LHRL);
    656   EVALUATE(LLGHRL);
    657   EVALUATE(STHRL);
    658   EVALUATE(LGRL);
    659   EVALUATE(STGRL);
    660   EVALUATE(LGFRL);
    661   EVALUATE(LRL);
    662   EVALUATE(LLGFRL);
    663   EVALUATE(STRL);
    664   EVALUATE(EXRL);
    665   EVALUATE(PFDRL);
    666   EVALUATE(CGHRL);
    667   EVALUATE(CHRL);
    668   EVALUATE(CGRL);
    669   EVALUATE(CGFRL);
    670   EVALUATE(ECTG);
    671   EVALUATE(CSST);
    672   EVALUATE(LPD);
    673   EVALUATE(LPDG);
    674   EVALUATE(BRCTH);
    675   EVALUATE(AIH);
    676   EVALUATE(ALSIH);
    677   EVALUATE(ALSIHN);
    678   EVALUATE(CIH);
    679   EVALUATE(CLIH);
    680   EVALUATE(STCK);
    681   EVALUATE(CFC);
    682   EVALUATE(IPM);
    683   EVALUATE(HSCH);
    684   EVALUATE(MSCH);
    685   EVALUATE(SSCH);
    686   EVALUATE(STSCH);
    687   EVALUATE(TSCH);
    688   EVALUATE(TPI);
    689   EVALUATE(SAL);
    690   EVALUATE(RSCH);
    691   EVALUATE(STCRW);
    692   EVALUATE(STCPS);
    693   EVALUATE(RCHP);
    694   EVALUATE(SCHM);
    695   EVALUATE(CKSM);
    696   EVALUATE(SAR);
    697   EVALUATE(EAR);
    698   EVALUATE(MSR);
    699   EVALUATE(MSRKC);
    700   EVALUATE(MVST);
    701   EVALUATE(CUSE);
    702   EVALUATE(SRST);
    703   EVALUATE(XSCH);
    704   EVALUATE(STCKE);
    705   EVALUATE(STCKF);
    706   EVALUATE(SRNM);
    707   EVALUATE(STFPC);
    708   EVALUATE(LFPC);
    709   EVALUATE(TRE);
    710   EVALUATE(CUUTF);
    711   EVALUATE(CUTFU);
    712   EVALUATE(STFLE);
    713   EVALUATE(SRNMB);
    714   EVALUATE(SRNMT);
    715   EVALUATE(LFAS);
    716   EVALUATE(PPA);
    717   EVALUATE(ETND);
    718   EVALUATE(TEND);
    719   EVALUATE(NIAI);
    720   EVALUATE(TABORT);
    721   EVALUATE(TRAP4);
    722   EVALUATE(LPEBR);
    723   EVALUATE(LNEBR);
    724   EVALUATE(LTEBR);
    725   EVALUATE(LCEBR);
    726   EVALUATE(LDEBR);
    727   EVALUATE(LXDBR);
    728   EVALUATE(LXEBR);
    729   EVALUATE(MXDBR);
    730   EVALUATE(KEBR);
    731   EVALUATE(CEBR);
    732   EVALUATE(AEBR);
    733   EVALUATE(SEBR);
    734   EVALUATE(MDEBR);
    735   EVALUATE(DEBR);
    736   EVALUATE(MAEBR);
    737   EVALUATE(MSEBR);
    738   EVALUATE(LPDBR);
    739   EVALUATE(LNDBR);
    740   EVALUATE(LTDBR);
    741   EVALUATE(LCDBR);
    742   EVALUATE(SQEBR);
    743   EVALUATE(SQDBR);
    744   EVALUATE(SQXBR);
    745   EVALUATE(MEEBR);
    746   EVALUATE(KDBR);
    747   EVALUATE(CDBR);
    748   EVALUATE(ADBR);
    749   EVALUATE(SDBR);
    750   EVALUATE(MDBR);
    751   EVALUATE(DDBR);
    752   EVALUATE(MADBR);
    753   EVALUATE(MSDBR);
    754   EVALUATE(LPXBR);
    755   EVALUATE(LNXBR);
    756   EVALUATE(LTXBR);
    757   EVALUATE(LCXBR);
    758   EVALUATE(LEDBRA);
    759   EVALUATE(LDXBRA);
    760   EVALUATE(LEXBRA);
    761   EVALUATE(FIXBRA);
    762   EVALUATE(KXBR);
    763   EVALUATE(CXBR);
    764   EVALUATE(AXBR);
    765   EVALUATE(SXBR);
    766   EVALUATE(MXBR);
    767   EVALUATE(DXBR);
    768   EVALUATE(TBEDR);
    769   EVALUATE(TBDR);
    770   EVALUATE(DIEBR);
    771   EVALUATE(FIEBRA);
    772   EVALUATE(THDER);
    773   EVALUATE(THDR);
    774   EVALUATE(DIDBR);
    775   EVALUATE(FIDBRA);
    776   EVALUATE(LXR);
    777   EVALUATE(LPDFR);
    778   EVALUATE(LNDFR);
    779   EVALUATE(LCDFR);
    780   EVALUATE(LZER);
    781   EVALUATE(LZDR);
    782   EVALUATE(LZXR);
    783   EVALUATE(SFPC);
    784   EVALUATE(SFASR);
    785   EVALUATE(EFPC);
    786   EVALUATE(CELFBR);
    787   EVALUATE(CDLFBR);
    788   EVALUATE(CXLFBR);
    789   EVALUATE(CEFBRA);
    790   EVALUATE(CDFBRA);
    791   EVALUATE(CXFBRA);
    792   EVALUATE(CFEBRA);
    793   EVALUATE(CFDBRA);
    794   EVALUATE(CFXBRA);
    795   EVALUATE(CLFEBR);
    796   EVALUATE(CLFDBR);
    797   EVALUATE(CLFXBR);
    798   EVALUATE(CELGBR);
    799   EVALUATE(CDLGBR);
    800   EVALUATE(CXLGBR);
    801   EVALUATE(CEGBRA);
    802   EVALUATE(CDGBRA);
    803   EVALUATE(CXGBRA);
    804   EVALUATE(CGEBRA);
    805   EVALUATE(CGDBRA);
    806   EVALUATE(CGXBRA);
    807   EVALUATE(CLGEBR);
    808   EVALUATE(CLGDBR);
    809   EVALUATE(CFER);
    810   EVALUATE(CFDR);
    811   EVALUATE(CFXR);
    812   EVALUATE(LDGR);
    813   EVALUATE(CGER);
    814   EVALUATE(CGDR);
    815   EVALUATE(CGXR);
    816   EVALUATE(LGDR);
    817   EVALUATE(MDTR);
    818   EVALUATE(MDTRA);
    819   EVALUATE(DDTRA);
    820   EVALUATE(ADTRA);
    821   EVALUATE(SDTRA);
    822   EVALUATE(LDETR);
    823   EVALUATE(LEDTR);
    824   EVALUATE(LTDTR);
    825   EVALUATE(FIDTR);
    826   EVALUATE(MXTRA);
    827   EVALUATE(DXTRA);
    828   EVALUATE(AXTRA);
    829   EVALUATE(SXTRA);
    830   EVALUATE(LXDTR);
    831   EVALUATE(LDXTR);
    832   EVALUATE(LTXTR);
    833   EVALUATE(FIXTR);
    834   EVALUATE(KDTR);
    835   EVALUATE(CGDTRA);
    836   EVALUATE(CUDTR);
    837   EVALUATE(CDTR);
    838   EVALUATE(EEDTR);
    839   EVALUATE(ESDTR);
    840   EVALUATE(KXTR);
    841   EVALUATE(CGXTRA);
    842   EVALUATE(CUXTR);
    843   EVALUATE(CSXTR);
    844   EVALUATE(CXTR);
    845   EVALUATE(EEXTR);
    846   EVALUATE(ESXTR);
    847   EVALUATE(CDGTRA);
    848   EVALUATE(CDUTR);
    849   EVALUATE(CDSTR);
    850   EVALUATE(CEDTR);
    851   EVALUATE(QADTR);
    852   EVALUATE(IEDTR);
    853   EVALUATE(RRDTR);
    854   EVALUATE(CXGTRA);
    855   EVALUATE(CXUTR);
    856   EVALUATE(CXSTR);
    857   EVALUATE(CEXTR);
    858   EVALUATE(QAXTR);
    859   EVALUATE(IEXTR);
    860   EVALUATE(RRXTR);
    861   EVALUATE(LPGR);
    862   EVALUATE(LNGR);
    863   EVALUATE(LTGR);
    864   EVALUATE(LCGR);
    865   EVALUATE(LGR);
    866   EVALUATE(LGBR);
    867   EVALUATE(LGHR);
    868   EVALUATE(AGR);
    869   EVALUATE(SGR);
    870   EVALUATE(ALGR);
    871   EVALUATE(SLGR);
    872   EVALUATE(MSGR);
    873   EVALUATE(MSGRKC);
    874   EVALUATE(DSGR);
    875   EVALUATE(LRVGR);
    876   EVALUATE(LPGFR);
    877   EVALUATE(LNGFR);
    878   EVALUATE(LTGFR);
    879   EVALUATE(LCGFR);
    880   EVALUATE(LGFR);
    881   EVALUATE(LLGFR);
    882   EVALUATE(LLGTR);
    883   EVALUATE(AGFR);
    884   EVALUATE(SGFR);
    885   EVALUATE(ALGFR);
    886   EVALUATE(SLGFR);
    887   EVALUATE(MSGFR);
    888   EVALUATE(DSGFR);
    889   EVALUATE(KMAC);
    890   EVALUATE(LRVR);
    891   EVALUATE(CGR);
    892   EVALUATE(CLGR);
    893   EVALUATE(LBR);
    894   EVALUATE(LHR);
    895   EVALUATE(KMF);
    896   EVALUATE(KMO);
    897   EVALUATE(PCC);
    898   EVALUATE(KMCTR);
    899   EVALUATE(KM);
    900   EVALUATE(KMC);
    901   EVALUATE(CGFR);
    902   EVALUATE(KIMD);
    903   EVALUATE(KLMD);
    904   EVALUATE(CFDTR);
    905   EVALUATE(CLGDTR);
    906   EVALUATE(CLFDTR);
    907   EVALUATE(BCTGR);
    908   EVALUATE(CFXTR);
    909   EVALUATE(CLFXTR);
    910   EVALUATE(CDFTR);
    911   EVALUATE(CDLGTR);
    912   EVALUATE(CDLFTR);
    913   EVALUATE(CXFTR);
    914   EVALUATE(CXLGTR);
    915   EVALUATE(CXLFTR);
    916   EVALUATE(CGRT);
    917   EVALUATE(NGR);
    918   EVALUATE(OGR);
    919   EVALUATE(XGR);
    920   EVALUATE(FLOGR);
    921   EVALUATE(LLGCR);
    922   EVALUATE(LLGHR);
    923   EVALUATE(MLGR);
    924   EVALUATE(DLGR);
    925   EVALUATE(ALCGR);
    926   EVALUATE(SLBGR);
    927   EVALUATE(EPSW);
    928   EVALUATE(TRTT);
    929   EVALUATE(TRTO);
    930   EVALUATE(TROT);
    931   EVALUATE(TROO);
    932   EVALUATE(LLCR);
    933   EVALUATE(LLHR);
    934   EVALUATE(MLR);
    935   EVALUATE(DLR);
    936   EVALUATE(ALCR);
    937   EVALUATE(SLBR);
    938   EVALUATE(CU14);
    939   EVALUATE(CU24);
    940   EVALUATE(CU41);
    941   EVALUATE(CU42);
    942   EVALUATE(TRTRE);
    943   EVALUATE(SRSTU);
    944   EVALUATE(TRTE);
    945   EVALUATE(AHHHR);
    946   EVALUATE(SHHHR);
    947   EVALUATE(ALHHHR);
    948   EVALUATE(SLHHHR);
    949   EVALUATE(CHHR);
    950   EVALUATE(AHHLR);
    951   EVALUATE(SHHLR);
    952   EVALUATE(ALHHLR);
    953   EVALUATE(SLHHLR);
    954   EVALUATE(CHLR);
    955   EVALUATE(POPCNT_Z);
    956   EVALUATE(LOCGR);
    957   EVALUATE(NGRK);
    958   EVALUATE(OGRK);
    959   EVALUATE(XGRK);
    960   EVALUATE(AGRK);
    961   EVALUATE(SGRK);
    962   EVALUATE(ALGRK);
    963   EVALUATE(SLGRK);
    964   EVALUATE(LOCR);
    965   EVALUATE(NRK);
    966   EVALUATE(ORK);
    967   EVALUATE(XRK);
    968   EVALUATE(ARK);
    969   EVALUATE(SRK);
    970   EVALUATE(ALRK);
    971   EVALUATE(SLRK);
    972   EVALUATE(LTG);
    973   EVALUATE(LG);
    974   EVALUATE(CVBY);
    975   EVALUATE(AG);
    976   EVALUATE(SG);
    977   EVALUATE(ALG);
    978   EVALUATE(SLG);
    979   EVALUATE(MSG);
    980   EVALUATE(DSG);
    981   EVALUATE(CVBG);
    982   EVALUATE(LRVG);
    983   EVALUATE(LT);
    984   EVALUATE(LGF);
    985   EVALUATE(LGH);
    986   EVALUATE(LLGF);
    987   EVALUATE(LLGT);
    988   EVALUATE(AGF);
    989   EVALUATE(SGF);
    990   EVALUATE(ALGF);
    991   EVALUATE(SLGF);
    992   EVALUATE(MSGF);
    993   EVALUATE(DSGF);
    994   EVALUATE(LRV);
    995   EVALUATE(LRVH);
    996   EVALUATE(CG);
    997   EVALUATE(CLG);
    998   EVALUATE(STG);
    999   EVALUATE(NTSTG);
   1000   EVALUATE(CVDY);
   1001   EVALUATE(CVDG);
   1002   EVALUATE(STRVG);
   1003   EVALUATE(CGF);
   1004   EVALUATE(CLGF);
   1005   EVALUATE(LTGF);
   1006   EVALUATE(CGH);
   1007   EVALUATE(PFD);
   1008   EVALUATE(STRV);
   1009   EVALUATE(STRVH);
   1010   EVALUATE(BCTG);
   1011   EVALUATE(STY);
   1012   EVALUATE(MSY);
   1013   EVALUATE(MSC);
   1014   EVALUATE(NY);
   1015   EVALUATE(CLY);
   1016   EVALUATE(OY);
   1017   EVALUATE(XY);
   1018   EVALUATE(LY);
   1019   EVALUATE(CY);
   1020   EVALUATE(AY);
   1021   EVALUATE(SY);
   1022   EVALUATE(MFY);
   1023   EVALUATE(ALY);
   1024   EVALUATE(SLY);
   1025   EVALUATE(STHY);
   1026   EVALUATE(LAY);
   1027   EVALUATE(STCY);
   1028   EVALUATE(ICY);
   1029   EVALUATE(LAEY);
   1030   EVALUATE(LB);
   1031   EVALUATE(LGB);
   1032   EVALUATE(LHY);
   1033   EVALUATE(CHY);
   1034   EVALUATE(AHY);
   1035   EVALUATE(SHY);
   1036   EVALUATE(MHY);
   1037   EVALUATE(NG);
   1038   EVALUATE(OG);
   1039   EVALUATE(XG);
   1040   EVALUATE(LGAT);
   1041   EVALUATE(MLG);
   1042   EVALUATE(DLG);
   1043   EVALUATE(ALCG);
   1044   EVALUATE(SLBG);
   1045   EVALUATE(STPQ);
   1046   EVALUATE(LPQ);
   1047   EVALUATE(LLGC);
   1048   EVALUATE(LLGH);
   1049   EVALUATE(LLC);
   1050   EVALUATE(LLH);
   1051   EVALUATE(ML);
   1052   EVALUATE(DL);
   1053   EVALUATE(ALC);
   1054   EVALUATE(SLB);
   1055   EVALUATE(LLGTAT);
   1056   EVALUATE(LLGFAT);
   1057   EVALUATE(LAT);
   1058   EVALUATE(LBH);
   1059   EVALUATE(LLCH);
   1060   EVALUATE(STCH);
   1061   EVALUATE(LHH);
   1062   EVALUATE(LLHH);
   1063   EVALUATE(STHH);
   1064   EVALUATE(LFHAT);
   1065   EVALUATE(LFH);
   1066   EVALUATE(STFH);
   1067   EVALUATE(CHF);
   1068   EVALUATE(MVCDK);
   1069   EVALUATE(MVHHI);
   1070   EVALUATE(MVGHI);
   1071   EVALUATE(MVHI);
   1072   EVALUATE(CHHSI);
   1073   EVALUATE(CGHSI);
   1074   EVALUATE(CHSI);
   1075   EVALUATE(CLFHSI);
   1076   EVALUATE(TBEGIN);
   1077   EVALUATE(TBEGINC);
   1078   EVALUATE(LMG);
   1079   EVALUATE(SRAG);
   1080   EVALUATE(SLAG);
   1081   EVALUATE(SRLG);
   1082   EVALUATE(SLLG);
   1083   EVALUATE(CSY);
   1084   EVALUATE(CSG);
   1085   EVALUATE(RLLG);
   1086   EVALUATE(RLL);
   1087   EVALUATE(STMG);
   1088   EVALUATE(STMH);
   1089   EVALUATE(STCMH);
   1090   EVALUATE(STCMY);
   1091   EVALUATE(CDSY);
   1092   EVALUATE(CDSG);
   1093   EVALUATE(BXHG);
   1094   EVALUATE(BXLEG);
   1095   EVALUATE(ECAG);
   1096   EVALUATE(TMY);
   1097   EVALUATE(MVIY);
   1098   EVALUATE(NIY);
   1099   EVALUATE(CLIY);
   1100   EVALUATE(OIY);
   1101   EVALUATE(XIY);
   1102   EVALUATE(ASI);
   1103   EVALUATE(ALSI);
   1104   EVALUATE(AGSI);
   1105   EVALUATE(ALGSI);
   1106   EVALUATE(ICMH);
   1107   EVALUATE(ICMY);
   1108   EVALUATE(MVCLU);
   1109   EVALUATE(CLCLU);
   1110   EVALUATE(STMY);
   1111   EVALUATE(LMH);
   1112   EVALUATE(LMY);
   1113   EVALUATE(TP);
   1114   EVALUATE(SRAK);
   1115   EVALUATE(SLAK);
   1116   EVALUATE(SRLK);
   1117   EVALUATE(SLLK);
   1118   EVALUATE(LOCG);
   1119   EVALUATE(STOCG);
   1120   EVALUATE(LANG);
   1121   EVALUATE(LAOG);
   1122   EVALUATE(LAXG);
   1123   EVALUATE(LAAG);
   1124   EVALUATE(LAALG);
   1125   EVALUATE(LOC);
   1126   EVALUATE(STOC);
   1127   EVALUATE(LAN);
   1128   EVALUATE(LAO);
   1129   EVALUATE(LAX);
   1130   EVALUATE(LAA);
   1131   EVALUATE(LAAL);
   1132   EVALUATE(BRXHG);
   1133   EVALUATE(BRXLG);
   1134   EVALUATE(RISBLG);
   1135   EVALUATE(RNSBG);
   1136   EVALUATE(RISBG);
   1137   EVALUATE(ROSBG);
   1138   EVALUATE(RXSBG);
   1139   EVALUATE(RISBGN);
   1140   EVALUATE(RISBHG);
   1141   EVALUATE(CGRJ);
   1142   EVALUATE(CGIT);
   1143   EVALUATE(CIT);
   1144   EVALUATE(CLFIT);
   1145   EVALUATE(CGIJ);
   1146   EVALUATE(CIJ);
   1147   EVALUATE(AHIK);
   1148   EVALUATE(AGHIK);
   1149   EVALUATE(ALHSIK);
   1150   EVALUATE(ALGHSIK);
   1151   EVALUATE(CGRB);
   1152   EVALUATE(CGIB);
   1153   EVALUATE(CIB);
   1154   EVALUATE(LDEB);
   1155   EVALUATE(LXDB);
   1156   EVALUATE(LXEB);
   1157   EVALUATE(MXDB);
   1158   EVALUATE(KEB);
   1159   EVALUATE(CEB);
   1160   EVALUATE(AEB);
   1161   EVALUATE(SEB);
   1162   EVALUATE(MDEB);
   1163   EVALUATE(DEB);
   1164   EVALUATE(MAEB);
   1165   EVALUATE(MSEB);
   1166   EVALUATE(TCEB);
   1167   EVALUATE(TCDB);
   1168   EVALUATE(TCXB);
   1169   EVALUATE(SQEB);
   1170   EVALUATE(SQDB);
   1171   EVALUATE(MEEB);
   1172   EVALUATE(KDB);
   1173   EVALUATE(CDB);
   1174   EVALUATE(ADB);
   1175   EVALUATE(SDB);
   1176   EVALUATE(MDB);
   1177   EVALUATE(DDB);
   1178   EVALUATE(MADB);
   1179   EVALUATE(MSDB);
   1180   EVALUATE(SLDT);
   1181   EVALUATE(SRDT);
   1182   EVALUATE(SLXT);
   1183   EVALUATE(SRXT);
   1184   EVALUATE(TDCET);
   1185   EVALUATE(TDGET);
   1186   EVALUATE(TDCDT);
   1187   EVALUATE(TDGDT);
   1188   EVALUATE(TDCXT);
   1189   EVALUATE(TDGXT);
   1190   EVALUATE(LEY);
   1191   EVALUATE(LDY);
   1192   EVALUATE(STEY);
   1193   EVALUATE(STDY);
   1194   EVALUATE(CZDT);
   1195   EVALUATE(CZXT);
   1196   EVALUATE(CDZT);
   1197   EVALUATE(CXZT);
   1198 #undef EVALUATE
   1199 };
   1200 
   1201 }  // namespace internal
   1202 }  // namespace v8
   1203 
   1204 #endif  // defined(USE_SIMULATOR)
   1205 #endif  // V8_S390_SIMULATOR_S390_H_
   1206