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 
CachePage()40   CachePage() { memset(&validity_map_, LINE_INVALID, sizeof(validity_map_)); }
41 
ValidityByte(int offset)42   char* ValidityByte(int offset) {
43     return &validity_map_[offset >> kLineShift];
44   }
45 
CachedData(int offset)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);
set_d_register_from_double(int dreg,const double dbl)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 
get_double_from_d_register(int dreg)123   double get_double_from_d_register(int dreg) {
124     DCHECK(dreg >= 0 && dreg < kNumFPRs);
125     return *bit_cast<double*>(&fp_registers_[dreg]);
126   }
set_d_register(int dreg,int64_t value)127   void set_d_register(int dreg, int64_t value) {
128     DCHECK(dreg >= 0 && dreg < kNumFPRs);
129     fp_registers_[dreg] = value;
130   }
get_d_register(int dreg)131   int64_t get_d_register(int dreg) {
132     DCHECK(dreg >= 0 && dreg < kNumFPRs);
133     return fp_registers_[dreg];
134   }
135 
set_d_register_from_float32(int dreg,const float f)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 
get_float32_from_d_register(int dreg)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 
get_sp()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>
Call(Address entry,Args...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);
last_debugger_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>
SetS390RoundConditionCode(T1 r2_val,T2 max,T2 min)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>
SetS390RoundConditionCode(T1 r2_val,int64_t max,int64_t min)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>
SetS390ConvertConditionCode(T1 src,T2 dst,T3 max)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>
SetS390ConditionCode(T lhs,T rhs)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>
SetS390ConditionCodeCarry(T result,bool overflow)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 
isNaN(double value)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>
SetS390BitWiseConditionCode(T value)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 
SetS390OverflowCode(bool isOF)379   void SetS390OverflowCode(bool isOF) {
380     if (isOF) condition_reg_ = CC_OF;
381   }
382 
TestConditionCode(Condition mask)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