OLD | NEW |
1 //===- subzero/src/IceTargetLoweringX8632Traits.h - x86-32 traits -*- C++ -*-=// | 1 //===- subzero/src/IceTargetLoweringX8632Traits.h - x86-32 traits -*- C++ -*-=// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 /// | 9 /// |
10 /// \file | 10 /// \file |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 static constexpr bool HasPopa = true; | 54 static constexpr bool HasPopa = true; |
55 static constexpr bool HasPusha = true; | 55 static constexpr bool HasPusha = true; |
56 static constexpr bool UsesX87 = true; | 56 static constexpr bool UsesX87 = true; |
57 static constexpr ::Ice::RegX8632::GPRRegister Last8BitGPR = | 57 static constexpr ::Ice::RegX8632::GPRRegister Last8BitGPR = |
58 ::Ice::RegX8632::GPRRegister::Encoded_Reg_ebx; | 58 ::Ice::RegX8632::GPRRegister::Encoded_Reg_ebx; |
59 | 59 |
60 enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 }; | 60 enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 }; |
61 | 61 |
62 using GPRRegister = ::Ice::RegX8632::GPRRegister; | 62 using GPRRegister = ::Ice::RegX8632::GPRRegister; |
63 using XmmRegister = ::Ice::RegX8632::XmmRegister; | 63 using XmmRegister = ::Ice::RegX8632::XmmRegister; |
64 using ByteRegister = ::Ice::RegX8632::ByteRegister; | |
65 using X87STRegister = ::Ice::RegX8632::X87STRegister; | 64 using X87STRegister = ::Ice::RegX8632::X87STRegister; |
66 | 65 |
67 using Cond = ::Ice::CondX86; | 66 using Cond = ::Ice::CondX86; |
68 | 67 |
69 using RegisterSet = ::Ice::RegX8632; | 68 using RegisterSet = ::Ice::RegX8632; |
70 static const GPRRegister Encoded_Reg_Accumulator = RegX8632::Encoded_Reg_eax; | 69 static const GPRRegister Encoded_Reg_Accumulator = RegX8632::Encoded_Reg_eax; |
71 static const GPRRegister Encoded_Reg_Counter = RegX8632::Encoded_Reg_ecx; | 70 static const GPRRegister Encoded_Reg_Counter = RegX8632::Encoded_Reg_ecx; |
72 static const FixupKind PcRelFixup = llvm::ELF::R_386_PC32; | 71 static const FixupKind PcRelFixup = llvm::ELF::R_386_PC32; |
73 static const FixupKind RelFixup = llvm::ELF::R_386_32; | 72 static const FixupKind RelFixup = llvm::ELF::R_386_32; |
74 | 73 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 Begin, | 269 Begin, |
271 // SSE2 is the PNaCl baseline instruction set. | 270 // SSE2 is the PNaCl baseline instruction set. |
272 SSE2 = Begin, | 271 SSE2 = Begin, |
273 SSE4_1, | 272 SSE4_1, |
274 End | 273 End |
275 }; | 274 }; |
276 | 275 |
277 static const char *TargetName; | 276 static const char *TargetName; |
278 static constexpr Type WordType = IceType_i32; | 277 static constexpr Type WordType = IceType_i32; |
279 | 278 |
280 static IceString getRegName(SizeT RegNum, Type Ty) { | 279 static IceString getRegName(int32_t RegNum) { |
281 assert(RegNum < RegisterSet::Reg_NUM); | 280 static const char *const RegNames[] = { |
282 static const char *RegNames8[] = { | 281 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
283 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | 282 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
284 frameptr, isI8, isInt, isFP) \ | 283 isTrunc8Rcvr, isAhRcvr, aliases) \ |
285 name8, | |
286 REGX8632_TABLE | |
287 #undef X | |
288 }; | |
289 | |
290 static const char *RegNames16[] = { | |
291 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | |
292 frameptr, isI8, isInt, isFP) \ | |
293 name16, | |
294 REGX8632_TABLE | |
295 #undef X | |
296 }; | |
297 | |
298 static const char *RegNames[] = { | |
299 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | |
300 frameptr, isI8, isInt, isFP) \ | |
301 name, | 284 name, |
302 REGX8632_TABLE | 285 REGX8632_TABLE |
303 #undef X | 286 #undef X |
304 }; | 287 }; |
| 288 assert(RegNum >= 0); |
| 289 assert(RegNum < RegisterSet::Reg_NUM); |
| 290 return RegNames[RegNum]; |
| 291 } |
305 | 292 |
306 switch (Ty) { | 293 static GPRRegister getEncodedGPR(int32_t RegNum) { |
307 case IceType_i1: | 294 static const GPRRegister GPRRegs[] = { |
308 case IceType_i8: | 295 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
309 return RegNames8[RegNum]; | 296 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
310 case IceType_i16: | 297 isTrunc8Rcvr, isAhRcvr, aliases) \ |
311 return RegNames16[RegNum]; | 298 GPRRegister(isGPR ? encode : GPRRegister::Encoded_Not_GPR), |
312 default: | 299 REGX8632_TABLE |
313 return RegNames[RegNum]; | 300 #undef X |
| 301 }; |
| 302 assert(RegNum >= 0); |
| 303 assert(RegNum < RegisterSet::Reg_NUM); |
| 304 assert(GPRRegs[RegNum] != GPRRegister::Encoded_Not_GPR); |
| 305 return GPRRegs[RegNum]; |
| 306 } |
| 307 |
| 308 static XmmRegister getEncodedXmm(int32_t RegNum) { |
| 309 static const XmmRegister XmmRegs[] = { |
| 310 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
| 311 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
| 312 isTrunc8Rcvr, isAhRcvr, aliases) \ |
| 313 XmmRegister(isXmm ? encode : XmmRegister::Encoded_Not_Xmm), |
| 314 REGX8632_TABLE |
| 315 #undef X |
| 316 }; |
| 317 assert(RegNum >= 0); |
| 318 assert(RegNum < RegisterSet::Reg_NUM); |
| 319 assert(XmmRegs[RegNum] != XmmRegister::Encoded_Not_Xmm); |
| 320 return XmmRegs[RegNum]; |
| 321 } |
| 322 |
| 323 static uint32_t getEncoding(int32_t RegNum) { |
| 324 static const uint32_t Encoding[] = { |
| 325 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
| 326 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
| 327 isTrunc8Rcvr, isAhRcvr, aliases) \ |
| 328 encode, |
| 329 REGX8632_TABLE |
| 330 #undef X |
| 331 }; |
| 332 assert(RegNum >= 0); |
| 333 assert(RegNum < RegisterSet::Reg_NUM); |
| 334 return Encoding[RegNum]; |
| 335 } |
| 336 |
| 337 static int32_t getBaseReg(int32_t RegNum) { |
| 338 static const int32_t BaseRegs[] = { |
| 339 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
| 340 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
| 341 isTrunc8Rcvr, isAhRcvr, aliases) \ |
| 342 RegisterSet::base, |
| 343 REGX8632_TABLE |
| 344 #undef X |
| 345 }; |
| 346 assert(RegNum >= 0); |
| 347 assert(RegNum < RegisterSet::Reg_NUM); |
| 348 return BaseRegs[RegNum]; |
| 349 } |
| 350 |
| 351 // Return a register in RegNum's alias set that is suitable for Ty. |
| 352 static int32_t getGprForType(Type Ty, int32_t RegNum) { |
| 353 assert(RegNum != Variable::NoRegister); |
| 354 // TODO(stichnot): Rewrite this as a table lookup from a table computed in a |
| 355 // TargetLowering static initializer. |
| 356 RegNum = getBaseReg(RegNum); |
| 357 if (Ty == IceType_i8 || Ty == IceType_i1) { |
| 358 switch (RegNum) { |
| 359 default: |
| 360 assert(0); |
| 361 case RegisterSet::Reg_eax: |
| 362 return RegisterSet::Reg_al; |
| 363 case RegisterSet::Reg_ecx: |
| 364 return RegisterSet::Reg_cl; |
| 365 case RegisterSet::Reg_edx: |
| 366 return RegisterSet::Reg_dl; |
| 367 case RegisterSet::Reg_ebx: |
| 368 return RegisterSet::Reg_bl; |
| 369 } |
314 } | 370 } |
| 371 if (Ty == IceType_i16) { |
| 372 switch (RegNum) { |
| 373 default: |
| 374 assert(0); |
| 375 case RegisterSet::Reg_eax: |
| 376 return RegisterSet::Reg_ax; |
| 377 case RegisterSet::Reg_ecx: |
| 378 return RegisterSet::Reg_cx; |
| 379 case RegisterSet::Reg_edx: |
| 380 return RegisterSet::Reg_dx; |
| 381 case RegisterSet::Reg_ebx: |
| 382 return RegisterSet::Reg_bx; |
| 383 case RegisterSet::Reg_ebp: |
| 384 return RegisterSet::Reg_bp; |
| 385 case RegisterSet::Reg_esi: |
| 386 return RegisterSet::Reg_si; |
| 387 case RegisterSet::Reg_edi: |
| 388 return RegisterSet::Reg_di; |
| 389 } |
| 390 } |
| 391 return RegNum; |
315 } | 392 } |
316 | 393 |
317 static void initRegisterSet( | 394 static void initRegisterSet( |
318 std::array<llvm::SmallBitVector, IceType_NUM> *TypeToRegisterSet, | 395 std::array<llvm::SmallBitVector, IceType_NUM> *TypeToRegisterSet, |
319 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases, | 396 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases, |
320 llvm::SmallBitVector *ScratchRegs) { | 397 llvm::SmallBitVector *ScratchRegs) { |
321 llvm::SmallBitVector IntegerRegisters(RegisterSet::Reg_NUM); | 398 llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM); |
| 399 llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM); |
322 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM); | 400 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM); |
323 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM); | 401 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM); |
324 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM); | 402 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM); |
325 llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM); | 403 llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM); |
326 ScratchRegs->resize(RegisterSet::Reg_NUM); | 404 ScratchRegs->resize(RegisterSet::Reg_NUM); |
327 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | 405 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
328 frameptr, isI8, isInt, isFP) \ | 406 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
329 (IntegerRegisters)[RegisterSet::val] = isInt; \ | 407 isTrunc8Rcvr, isAhRcvr, aliases) \ |
330 (IntegerRegistersI8)[RegisterSet::val] = isI8; \ | 408 (IntegerRegistersI32)[RegisterSet::val] = is32; \ |
331 (FloatRegisters)[RegisterSet::val] = isFP; \ | 409 (IntegerRegistersI16)[RegisterSet::val] = is16; \ |
332 (VectorRegisters)[RegisterSet::val] = isFP; \ | 410 (IntegerRegistersI8)[RegisterSet::val] = is8; \ |
| 411 (FloatRegisters)[RegisterSet::val] = isXmm; \ |
| 412 (VectorRegisters)[RegisterSet::val] = isXmm; \ |
333 (*RegisterAliases)[RegisterSet::val].resize(RegisterSet::Reg_NUM); \ | 413 (*RegisterAliases)[RegisterSet::val].resize(RegisterSet::Reg_NUM); \ |
| 414 for (SizeT RegAlias : aliases) { \ |
| 415 assert(!(*RegisterAliases)[RegisterSet::val][RegAlias] && \ |
| 416 "Duplicate alias for " #val); \ |
| 417 (*RegisterAliases)[RegisterSet::val].set(RegAlias); \ |
| 418 } \ |
334 (*RegisterAliases)[RegisterSet::val].set(RegisterSet::val); \ | 419 (*RegisterAliases)[RegisterSet::val].set(RegisterSet::val); \ |
335 (*ScratchRegs)[RegisterSet::val] = scratch; | 420 (*ScratchRegs)[RegisterSet::val] = scratch; |
336 REGX8632_TABLE; | 421 REGX8632_TABLE; |
337 #undef X | 422 #undef X |
338 | 423 |
339 (*TypeToRegisterSet)[IceType_void] = InvalidRegisters; | 424 (*TypeToRegisterSet)[IceType_void] = InvalidRegisters; |
340 (*TypeToRegisterSet)[IceType_i1] = IntegerRegistersI8; | 425 (*TypeToRegisterSet)[IceType_i1] = IntegerRegistersI8; |
341 (*TypeToRegisterSet)[IceType_i8] = IntegerRegistersI8; | 426 (*TypeToRegisterSet)[IceType_i8] = IntegerRegistersI8; |
342 (*TypeToRegisterSet)[IceType_i16] = IntegerRegisters; | 427 (*TypeToRegisterSet)[IceType_i16] = IntegerRegistersI16; |
343 (*TypeToRegisterSet)[IceType_i32] = IntegerRegisters; | 428 (*TypeToRegisterSet)[IceType_i32] = IntegerRegistersI32; |
344 (*TypeToRegisterSet)[IceType_i64] = IntegerRegisters; | 429 (*TypeToRegisterSet)[IceType_i64] = IntegerRegistersI32; |
345 (*TypeToRegisterSet)[IceType_f32] = FloatRegisters; | 430 (*TypeToRegisterSet)[IceType_f32] = FloatRegisters; |
346 (*TypeToRegisterSet)[IceType_f64] = FloatRegisters; | 431 (*TypeToRegisterSet)[IceType_f64] = FloatRegisters; |
347 (*TypeToRegisterSet)[IceType_v4i1] = VectorRegisters; | 432 (*TypeToRegisterSet)[IceType_v4i1] = VectorRegisters; |
348 (*TypeToRegisterSet)[IceType_v8i1] = VectorRegisters; | 433 (*TypeToRegisterSet)[IceType_v8i1] = VectorRegisters; |
349 (*TypeToRegisterSet)[IceType_v16i1] = VectorRegisters; | 434 (*TypeToRegisterSet)[IceType_v16i1] = VectorRegisters; |
350 (*TypeToRegisterSet)[IceType_v16i8] = VectorRegisters; | 435 (*TypeToRegisterSet)[IceType_v16i8] = VectorRegisters; |
351 (*TypeToRegisterSet)[IceType_v8i16] = VectorRegisters; | 436 (*TypeToRegisterSet)[IceType_v8i16] = VectorRegisters; |
352 (*TypeToRegisterSet)[IceType_v4i32] = VectorRegisters; | 437 (*TypeToRegisterSet)[IceType_v4i32] = VectorRegisters; |
353 (*TypeToRegisterSet)[IceType_v4f32] = VectorRegisters; | 438 (*TypeToRegisterSet)[IceType_v4f32] = VectorRegisters; |
354 } | 439 } |
355 | 440 |
356 static llvm::SmallBitVector | 441 static llvm::SmallBitVector |
357 getRegisterSet(TargetLowering::RegSetMask Include, | 442 getRegisterSet(TargetLowering::RegSetMask Include, |
358 TargetLowering::RegSetMask Exclude) { | 443 TargetLowering::RegSetMask Exclude) { |
359 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM); | 444 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM); |
360 | 445 |
361 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | 446 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
362 frameptr, isI8, isInt, isFP) \ | 447 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
| 448 isTrunc8Rcvr, isAhRcvr, aliases) \ |
363 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \ | 449 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \ |
364 Registers[RegisterSet::val] = true; \ | 450 Registers[RegisterSet::val] = true; \ |
365 if (preserved && (Include & ::Ice::TargetLowering::RegSet_CalleeSave)) \ | 451 if (preserved && (Include & ::Ice::TargetLowering::RegSet_CalleeSave)) \ |
366 Registers[RegisterSet::val] = true; \ | 452 Registers[RegisterSet::val] = true; \ |
367 if (stackptr && (Include & ::Ice::TargetLowering::RegSet_StackPointer)) \ | 453 if (stackptr && (Include & ::Ice::TargetLowering::RegSet_StackPointer)) \ |
368 Registers[RegisterSet::val] = true; \ | 454 Registers[RegisterSet::val] = true; \ |
369 if (frameptr && (Include & ::Ice::TargetLowering::RegSet_FramePointer)) \ | 455 if (frameptr && (Include & ::Ice::TargetLowering::RegSet_FramePointer)) \ |
370 Registers[RegisterSet::val] = true; \ | 456 Registers[RegisterSet::val] = true; \ |
371 if (scratch && (Exclude & ::Ice::TargetLowering::RegSet_CallerSave)) \ | 457 if (scratch && (Exclude & ::Ice::TargetLowering::RegSet_CallerSave)) \ |
372 Registers[RegisterSet::val] = false; \ | 458 Registers[RegisterSet::val] = false; \ |
(...skipping 24 matching lines...) Expand all Loading... |
397 // performance, not correctness. | 483 // performance, not correctness. |
398 static const unsigned MaxEquivalenceClassSize = 8; | 484 static const unsigned MaxEquivalenceClassSize = 8; |
399 using RegisterList = llvm::SmallVector<int32_t, MaxEquivalenceClassSize>; | 485 using RegisterList = llvm::SmallVector<int32_t, MaxEquivalenceClassSize>; |
400 using EquivalenceClassMap = std::map<uint32_t, RegisterList>; | 486 using EquivalenceClassMap = std::map<uint32_t, RegisterList>; |
401 EquivalenceClassMap EquivalenceClasses; | 487 EquivalenceClassMap EquivalenceClasses; |
402 SizeT NumShuffled = 0, NumPreserved = 0; | 488 SizeT NumShuffled = 0, NumPreserved = 0; |
403 | 489 |
404 // Build up the equivalence classes of registers by looking at the register | 490 // Build up the equivalence classes of registers by looking at the register |
405 // properties as well as whether the registers should be explicitly excluded | 491 // properties as well as whether the registers should be explicitly excluded |
406 // from shuffling. | 492 // from shuffling. |
407 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ | 493 #define X(val, encode, name, base, scratch, preserved, stackptr, frameptr, \ |
408 frameptr, isI8, isInt, isFP) \ | 494 isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \ |
| 495 isTrunc8Rcvr, isAhRcvr, aliases) \ |
409 if (ExcludeRegisters[RegisterSet::val]) { \ | 496 if (ExcludeRegisters[RegisterSet::val]) { \ |
410 /* val stays the same in the resulting permutation. */ \ | 497 /* val stays the same in the resulting permutation. */ \ |
411 Permutation[RegisterSet::val] = RegisterSet::val; \ | 498 Permutation[RegisterSet::val] = RegisterSet::val; \ |
412 ++NumPreserved; \ | 499 ++NumPreserved; \ |
413 } else { \ | 500 } else { \ |
414 const uint32_t Index = (scratch << 0) | (preserved << 1) | (isI8 << 2) | \ | 501 const uint32_t Index = (scratch << 0) | (preserved << 1) | (is8 << 2) | \ |
415 (isInt << 3) | (isFP << 4); \ | 502 (is16 << 3) | (is32 << 4) | (isXmm << 5); \ |
416 /* val is assigned to an equivalence class based on its properties. */ \ | 503 /* val is assigned to an equivalence class based on its properties. */ \ |
417 EquivalenceClasses[Index].push_back(RegisterSet::val); \ | 504 EquivalenceClasses[Index].push_back(RegisterSet::val); \ |
418 } | 505 } |
419 REGX8632_TABLE | 506 REGX8632_TABLE |
420 #undef X | 507 #undef X |
421 | 508 |
422 // Create a random number generator for regalloc randomization. | 509 // Create a random number generator for regalloc randomization. |
423 RandomNumberGenerator RNG(Ctx->getFlags().getRandomSeed(), | 510 RandomNumberGenerator RNG(Ctx->getFlags().getRandomSeed(), |
424 RPE_RegAllocRandomization, Salt); | 511 RPE_RegAllocRandomization, Salt); |
425 RandomNumberGeneratorWrapper RNGW(RNG); | 512 RandomNumberGeneratorWrapper RNGW(RNG); |
(...skipping 16 matching lines...) Expand all Loading... |
442 Ostream &Str = Func->getContext()->getStrDump(); | 529 Ostream &Str = Func->getContext()->getStrDump(); |
443 Str << "Register equivalence classes:\n"; | 530 Str << "Register equivalence classes:\n"; |
444 for (auto I : EquivalenceClasses) { | 531 for (auto I : EquivalenceClasses) { |
445 Str << "{"; | 532 Str << "{"; |
446 const RegisterList &List = I.second; | 533 const RegisterList &List = I.second; |
447 bool First = true; | 534 bool First = true; |
448 for (int32_t Register : List) { | 535 for (int32_t Register : List) { |
449 if (!First) | 536 if (!First) |
450 Str << " "; | 537 Str << " "; |
451 First = false; | 538 First = false; |
452 Str << getRegName(Register, IceType_i32); | 539 Str << getRegName(Register); |
453 } | 540 } |
454 Str << "}\n"; | 541 Str << "}\n"; |
455 } | 542 } |
456 } | 543 } |
457 } | 544 } |
458 | 545 |
459 /// The maximum number of arguments to pass in XMM registers | 546 /// The maximum number of arguments to pass in XMM registers |
460 static const uint32_t X86_MAX_XMM_ARGS = 4; | 547 static const uint32_t X86_MAX_XMM_ARGS = 4; |
461 /// The number of bits in a byte | 548 /// The number of bits in a byte |
462 static const uint32_t X86_CHAR_BIT = 8; | 549 static const uint32_t X86_CHAR_BIT = 8; |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 | 828 |
742 } // end of namespace X86Internal | 829 } // end of namespace X86Internal |
743 | 830 |
744 namespace X8632 { | 831 namespace X8632 { |
745 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8632>; | 832 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8632>; |
746 } // end of namespace X8632 | 833 } // end of namespace X8632 |
747 | 834 |
748 } // end of namespace Ice | 835 } // end of namespace Ice |
749 | 836 |
750 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H | 837 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H |
OLD | NEW |