| OLD | NEW | 
|---|
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 
| 2 // All Rights Reserved. | 2 // All Rights Reserved. | 
| 3 // | 3 // | 
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without | 
| 5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions | 
| 6 // are met: | 6 // are met: | 
| 7 // | 7 // | 
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, | 
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. | 
| 10 // | 10 // | 
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 546   // FIXED_SEQUENCE | 546   // FIXED_SEQUENCE | 
| 547   static const int kDebugBreakSlotInstructions = | 547   static const int kDebugBreakSlotInstructions = | 
| 548       kMovInstructionsNoConstantPool + 2; | 548       kMovInstructionsNoConstantPool + 2; | 
| 549   static const int kDebugBreakSlotLength = | 549   static const int kDebugBreakSlotLength = | 
| 550       kDebugBreakSlotInstructions * kInstrSize; | 550       kDebugBreakSlotInstructions * kInstrSize; | 
| 551 | 551 | 
| 552   static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) { | 552   static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) { | 
| 553     return ((cr.code() * CRWIDTH) + crbit); | 553     return ((cr.code() * CRWIDTH) + crbit); | 
| 554   } | 554   } | 
| 555 | 555 | 
|  | 556 #define DECLARE_PPC_XX3_INSTRUCTIONS(name, instr_name, instr_value)  \ | 
|  | 557   inline void name(const DoubleRegister rt, const DoubleRegister ra, \ | 
|  | 558                    const DoubleRegister rb) {                        \ | 
|  | 559     xx3_form(instr_name, rt, ra, rb);                                \ | 
|  | 560   } | 
|  | 561 | 
|  | 562   inline void xx3_form(Instr instr, DoubleRegister t, DoubleRegister a, | 
|  | 563                        DoubleRegister b) { | 
|  | 564     int AX = ((a.code() & 0x20) >> 5) & 0x1; | 
|  | 565     int BX = ((b.code() & 0x20) >> 5) & 0x1; | 
|  | 566     int TX = ((t.code() & 0x20) >> 5) & 0x1; | 
|  | 567 | 
|  | 568     emit(instr | (t.code() & 0x1F) * B21 | (a.code() & 0x1F) * B16 | | 
|  | 569          (b.code() & 0x1F) * B11 | AX * B2 | BX * B1 | TX); | 
|  | 570   } | 
|  | 571 | 
|  | 572   PPC_XX3_OPCODE_LIST(DECLARE_PPC_XX3_INSTRUCTIONS) | 
|  | 573 #undef DECLARE_PPC_XX3_INSTRUCTIONS | 
|  | 574 | 
| 556   // --------------------------------------------------------------------------- | 575   // --------------------------------------------------------------------------- | 
| 557   // Code generation | 576   // Code generation | 
| 558 | 577 | 
| 559   // Insert the smallest number of nop instructions | 578   // Insert the smallest number of nop instructions | 
| 560   // possible to align the pc offset to a multiple | 579   // possible to align the pc offset to a multiple | 
| 561   // of m. m must be a power of 2 (>= 4). | 580   // of m. m must be a power of 2 (>= 4). | 
| 562   void Align(int m); | 581   void Align(int m); | 
| 563   // Insert the smallest number of zero bytes possible to align the pc offset | 582   // Insert the smallest number of zero bytes possible to align the pc offset | 
| 564   // to a mulitple of m. m must be a power of 2 (>= 2). | 583   // to a mulitple of m. m must be a power of 2 (>= 2). | 
| 565   void DataAlign(int m); | 584   void DataAlign(int m); | 
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1095              RCBit rc = LeaveRC); | 1114              RCBit rc = LeaveRC); | 
| 1096   void fabs(const DoubleRegister frt, const DoubleRegister frb, | 1115   void fabs(const DoubleRegister frt, const DoubleRegister frb, | 
| 1097             RCBit rc = LeaveRC); | 1116             RCBit rc = LeaveRC); | 
| 1098   void fmadd(const DoubleRegister frt, const DoubleRegister fra, | 1117   void fmadd(const DoubleRegister frt, const DoubleRegister fra, | 
| 1099              const DoubleRegister frc, const DoubleRegister frb, | 1118              const DoubleRegister frc, const DoubleRegister frb, | 
| 1100              RCBit rc = LeaveRC); | 1119              RCBit rc = LeaveRC); | 
| 1101   void fmsub(const DoubleRegister frt, const DoubleRegister fra, | 1120   void fmsub(const DoubleRegister frt, const DoubleRegister fra, | 
| 1102              const DoubleRegister frc, const DoubleRegister frb, | 1121              const DoubleRegister frc, const DoubleRegister frb, | 
| 1103              RCBit rc = LeaveRC); | 1122              RCBit rc = LeaveRC); | 
| 1104 | 1123 | 
| 1105   // Support for VSX instructions |  | 
| 1106 |  | 
| 1107   void xsadddp(const DoubleRegister frt, const DoubleRegister fra, |  | 
| 1108                const DoubleRegister frb); |  | 
| 1109   void xssubdp(const DoubleRegister frt, const DoubleRegister fra, |  | 
| 1110                const DoubleRegister frb); |  | 
| 1111   void xsdivdp(const DoubleRegister frt, const DoubleRegister fra, |  | 
| 1112                const DoubleRegister frb); |  | 
| 1113   void xsmuldp(const DoubleRegister frt, const DoubleRegister fra, |  | 
| 1114                const DoubleRegister frc); |  | 
| 1115 |  | 
| 1116   // Pseudo instructions | 1124   // Pseudo instructions | 
| 1117 | 1125 | 
| 1118   // Different nop operations are used by the code generator to detect certain | 1126   // Different nop operations are used by the code generator to detect certain | 
| 1119   // states of the generated code. | 1127   // states of the generated code. | 
| 1120   enum NopMarkerTypes { | 1128   enum NopMarkerTypes { | 
| 1121     NON_MARKING_NOP = 0, | 1129     NON_MARKING_NOP = 0, | 
| 1122     GROUP_ENDING_NOP, | 1130     GROUP_ENDING_NOP, | 
| 1123     DEBUG_BREAK_NOP, | 1131     DEBUG_BREAK_NOP, | 
| 1124     // IC markers. | 1132     // IC markers. | 
| 1125     PROPERTY_ACCESS_INLINED, | 1133     PROPERTY_ACCESS_INLINED, | 
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1408   inline void CheckTrampolinePoolQuick(); | 1416   inline void CheckTrampolinePoolQuick(); | 
| 1409 | 1417 | 
| 1410   // Instruction generation | 1418   // Instruction generation | 
| 1411   void a_form(Instr instr, DoubleRegister frt, DoubleRegister fra, | 1419   void a_form(Instr instr, DoubleRegister frt, DoubleRegister fra, | 
| 1412               DoubleRegister frb, RCBit r); | 1420               DoubleRegister frb, RCBit r); | 
| 1413   void d_form(Instr instr, Register rt, Register ra, const intptr_t val, | 1421   void d_form(Instr instr, Register rt, Register ra, const intptr_t val, | 
| 1414               bool signed_disp); | 1422               bool signed_disp); | 
| 1415   void x_form(Instr instr, Register ra, Register rs, Register rb, RCBit r); | 1423   void x_form(Instr instr, Register ra, Register rs, Register rb, RCBit r); | 
| 1416   void xo_form(Instr instr, Register rt, Register ra, Register rb, OEBit o, | 1424   void xo_form(Instr instr, Register rt, Register ra, Register rb, OEBit o, | 
| 1417                RCBit r); | 1425                RCBit r); | 
| 1418   void xx3_form(Instr instr, DoubleRegister t, DoubleRegister a, |  | 
| 1419                 DoubleRegister b); |  | 
| 1420   void md_form(Instr instr, Register ra, Register rs, int shift, int maskbit, | 1426   void md_form(Instr instr, Register ra, Register rs, int shift, int maskbit, | 
| 1421                RCBit r); | 1427                RCBit r); | 
| 1422   void mds_form(Instr instr, Register ra, Register rs, Register rb, int maskbit, | 1428   void mds_form(Instr instr, Register ra, Register rs, Register rb, int maskbit, | 
| 1423                 RCBit r); | 1429                 RCBit r); | 
| 1424 | 1430 | 
| 1425   // Labels | 1431   // Labels | 
| 1426   void print(Label* L); | 1432   void print(Label* L); | 
| 1427   int max_reach_from(int pos); | 1433   int max_reach_from(int pos); | 
| 1428   void bind_to(Label* L, int pos); | 1434   void bind_to(Label* L, int pos); | 
| 1429   void next(Label* L); | 1435   void next(Label* L); | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1484 | 1490 | 
| 1485 | 1491 | 
| 1486 class EnsureSpace BASE_EMBEDDED { | 1492 class EnsureSpace BASE_EMBEDDED { | 
| 1487  public: | 1493  public: | 
| 1488   explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); } | 1494   explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); } | 
| 1489 }; | 1495 }; | 
| 1490 }  // namespace internal | 1496 }  // namespace internal | 
| 1491 }  // namespace v8 | 1497 }  // namespace v8 | 
| 1492 | 1498 | 
| 1493 #endif  // V8_PPC_ASSEMBLER_PPC_H_ | 1499 #endif  // V8_PPC_ASSEMBLER_PPC_H_ | 
| OLD | NEW | 
|---|