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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 supported_ |= (1u << GENERAL_INSTR_EXT); | 159 supported_ |= (1u << GENERAL_INSTR_EXT); |
160 } | 160 } |
161 // Test for Floating Point Extension Facility - Bit 37 | 161 // Test for Floating Point Extension Facility - Bit 37 |
162 if (facilities[0] & (one << (63 - 37))) { | 162 if (facilities[0] & (one << (63 - 37))) { |
163 supported_ |= (1u << FLOATING_POINT_EXT); | 163 supported_ |= (1u << FLOATING_POINT_EXT); |
164 } | 164 } |
165 // Test for Vector Facility - Bit 129 | 165 // Test for Vector Facility - Bit 129 |
166 if (facilities[2] & (one << (63 - (129 - 128)))) { | 166 if (facilities[2] & (one << (63 - (129 - 128)))) { |
167 supported_ |= (1u << VECTOR_FACILITY); | 167 supported_ |= (1u << VECTOR_FACILITY); |
168 } | 168 } |
| 169 // Test for Miscellaneous Instruction Extension Facility - Bit 58 |
| 170 if (facilities[0] & (1lu << (63 - 58))) { |
| 171 supported_ |= (1u << MISC_INSTR_EXT2); |
| 172 } |
169 } | 173 } |
170 #else | 174 #else |
171 // All distinct ops instructions can be simulated | 175 // All distinct ops instructions can be simulated |
172 supported_ |= (1u << DISTINCT_OPS); | 176 supported_ |= (1u << DISTINCT_OPS); |
173 // RISBG can be simulated | 177 // RISBG can be simulated |
174 supported_ |= (1u << GENERAL_INSTR_EXT); | 178 supported_ |= (1u << GENERAL_INSTR_EXT); |
175 | |
176 supported_ |= (1u << FLOATING_POINT_EXT); | 179 supported_ |= (1u << FLOATING_POINT_EXT); |
| 180 supported_ |= (1u << MISC_INSTR_EXT2); |
177 USE(performSTFLE); // To avoid assert | 181 USE(performSTFLE); // To avoid assert |
178 supported_ |= (1u << VECTOR_FACILITY); | 182 supported_ |= (1u << VECTOR_FACILITY); |
179 #endif | 183 #endif |
180 supported_ |= (1u << FPU); | 184 supported_ |= (1u << FPU); |
181 } | 185 } |
182 | 186 |
183 void CpuFeatures::PrintTarget() { | 187 void CpuFeatures::PrintTarget() { |
184 const char* s390_arch = NULL; | 188 const char* s390_arch = NULL; |
185 | 189 |
186 #if V8_TARGET_ARCH_S390X | 190 #if V8_TARGET_ARCH_S390X |
187 s390_arch = "s390x"; | 191 s390_arch = "s390x"; |
188 #else | 192 #else |
189 s390_arch = "s390"; | 193 s390_arch = "s390"; |
190 #endif | 194 #endif |
191 | 195 |
192 printf("target %s\n", s390_arch); | 196 printf("target %s\n", s390_arch); |
193 } | 197 } |
194 | 198 |
195 void CpuFeatures::PrintFeatures() { | 199 void CpuFeatures::PrintFeatures() { |
196 printf("FPU=%d\n", CpuFeatures::IsSupported(FPU)); | 200 printf("FPU=%d\n", CpuFeatures::IsSupported(FPU)); |
197 printf("FPU_EXT=%d\n", CpuFeatures::IsSupported(FLOATING_POINT_EXT)); | 201 printf("FPU_EXT=%d\n", CpuFeatures::IsSupported(FLOATING_POINT_EXT)); |
198 printf("GENERAL_INSTR=%d\n", CpuFeatures::IsSupported(GENERAL_INSTR_EXT)); | 202 printf("GENERAL_INSTR=%d\n", CpuFeatures::IsSupported(GENERAL_INSTR_EXT)); |
199 printf("DISTINCT_OPS=%d\n", CpuFeatures::IsSupported(DISTINCT_OPS)); | 203 printf("DISTINCT_OPS=%d\n", CpuFeatures::IsSupported(DISTINCT_OPS)); |
200 printf("VECTOR_FACILITY=%d\n", CpuFeatures::IsSupported(VECTOR_FACILITY)); | 204 printf("VECTOR_FACILITY=%d\n", CpuFeatures::IsSupported(VECTOR_FACILITY)); |
| 205 printf("MISC_INSTR_EXT2=%d\n", CpuFeatures::IsSupported(MISC_INSTR_EXT2)); |
201 } | 206 } |
202 | 207 |
203 Register ToRegister(int num) { | 208 Register ToRegister(int num) { |
204 DCHECK(num >= 0 && num < kNumRegisters); | 209 DCHECK(num >= 0 && num < kNumRegisters); |
205 const Register kRegisters[] = {r0, r1, r2, r3, r4, r5, r6, r7, | 210 const Register kRegisters[] = {r0, r1, r2, r3, r4, r5, r6, r7, |
206 r8, r9, r10, fp, ip, r13, r14, sp}; | 211 r8, r9, r10, fp, ip, r13, r14, sp}; |
207 return kRegisters[num]; | 212 return kRegisters[num]; |
208 } | 213 } |
209 | 214 |
210 // ----------------------------------------------------------------------------- | 215 // ----------------------------------------------------------------------------- |
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1503 } | 1508 } |
1504 | 1509 |
1505 // ---------------------------- | 1510 // ---------------------------- |
1506 // 32-bit Multiply Instructions | 1511 // 32-bit Multiply Instructions |
1507 // ---------------------------- | 1512 // ---------------------------- |
1508 // Multiply Halfword Immediate (32) | 1513 // Multiply Halfword Immediate (32) |
1509 void Assembler::mhi(Register r1, const Operand& opnd) { | 1514 void Assembler::mhi(Register r1, const Operand& opnd) { |
1510 ri_form(MHI, r1, opnd); | 1515 ri_form(MHI, r1, opnd); |
1511 } | 1516 } |
1512 | 1517 |
| 1518 // Multiply Single Register (32) |
| 1519 void Assembler::msrkc(Register r1, Register r2, Register r3) { |
| 1520 rrf1_form(MSRKC, r1, r2, r3); |
| 1521 } |
| 1522 |
| 1523 // Multiply Single Register (64) |
| 1524 void Assembler::msgrkc(Register r1, Register r2, Register r3) { |
| 1525 rrf1_form(MSGRKC, r1, r2, r3); |
| 1526 } |
| 1527 |
1513 // ---------------------------- | 1528 // ---------------------------- |
1514 // 64-bit Multiply Instructions | 1529 // 64-bit Multiply Instructions |
1515 // ---------------------------- | 1530 // ---------------------------- |
1516 // Multiply Halfword Immediate (64) | 1531 // Multiply Halfword Immediate (64) |
1517 void Assembler::mghi(Register r1, const Operand& opnd) { | 1532 void Assembler::mghi(Register r1, const Operand& opnd) { |
1518 ri_form(MGHI, r1, opnd); | 1533 ri_form(MGHI, r1, opnd); |
1519 } | 1534 } |
1520 | 1535 |
1521 // -------------------- | 1536 // -------------------- |
1522 // Bitwise Instructions | 1537 // Bitwise Instructions |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2098 SKIP_ICACHE_FLUSH); | 2113 SKIP_ICACHE_FLUSH); |
2099 } | 2114 } |
2100 | 2115 |
2101 reloc_info_writer.Write(&rinfo); | 2116 reloc_info_writer.Write(&rinfo); |
2102 } | 2117 } |
2103 } | 2118 } |
2104 | 2119 |
2105 } // namespace internal | 2120 } // namespace internal |
2106 } // namespace v8 | 2121 } // namespace v8 |
2107 #endif // V8_TARGET_ARCH_S390 | 2122 #endif // V8_TARGET_ARCH_S390 |
OLD | NEW |