Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: src/IceTargetLoweringX8632Traits.h

Issue 1319203005: Subzero. Changes the Register Allocator so that it is aware of register (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: make format Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 /// This file declares the X8632 Target Lowering Traits. 11 /// This file declares the X8632 Target Lowering Traits.
12 /// 12 ///
13 //===----------------------------------------------------------------------===// 13 //===----------------------------------------------------------------------===//
14 14
15 #ifndef SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H 15 #ifndef SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H
16 #define SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H 16 #define SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H
17 17
18 #include "IceAssembler.h" 18 #include "IceAssembler.h"
19 #include "IceConditionCodesX8632.h" 19 #include "IceConditionCodesX8632.h"
20 #include "IceDefs.h" 20 #include "IceDefs.h"
21 #include "IceInst.h" 21 #include "IceInst.h"
22 #include "IceInstX8632.def" 22 #include "IceInstX8632.def"
23 #include "IceOperand.h" 23 #include "IceOperand.h"
24 #include "IceRegistersX8632.h" 24 #include "IceRegistersX8632.h"
25 #include "IceTargetLoweringX8632.def" 25 #include "IceTargetLoweringX8632.def"
26 #include "IceTargetLowering.h" 26 #include "IceTargetLowering.h"
27 27
28 #include <vector>
Jim Stichnoth 2015/09/03 17:48:49 Is this needed? I would have expected <array> if
John 2015/09/03 22:38:25 Done.
29
28 namespace Ice { 30 namespace Ice {
29 31
30 class TargetX8632; 32 class TargetX8632;
31 33
32 namespace X8632 { 34 namespace X8632 {
33 class AssemblerX8632; 35 class AssemblerX8632;
34 } // end of namespace X8632 36 } // end of namespace X8632
35 37
36 namespace X86Internal { 38 namespace X86Internal {
37 39
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 case IceType_i1: 307 case IceType_i1:
306 case IceType_i8: 308 case IceType_i8:
307 return RegNames8[RegNum]; 309 return RegNames8[RegNum];
308 case IceType_i16: 310 case IceType_i16:
309 return RegNames16[RegNum]; 311 return RegNames16[RegNum];
310 default: 312 default:
311 return RegNames[RegNum]; 313 return RegNames[RegNum];
312 } 314 }
313 } 315 }
314 316
315 static void initRegisterSet(llvm::SmallBitVector *IntegerRegisters, 317 static void initRegisterSet(
316 llvm::SmallBitVector *IntegerRegistersI8, 318 std::array<llvm::SmallBitVector, IceType_NUM> *TypeToRegisterSet,
317 llvm::SmallBitVector *FloatRegisters, 319 std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
318 llvm::SmallBitVector *VectorRegisters, 320 llvm::SmallBitVector *ScratchRegs) {
319 llvm::SmallBitVector *ScratchRegs) { 321 llvm::SmallBitVector IntegerRegisters(RegisterSet::Reg_NUM);
322 llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
323 llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM);
324 llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM);
325 llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM);
326 ScratchRegs->resize(RegisterSet::Reg_NUM);
320 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ 327 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \
321 frameptr, isI8, isInt, isFP) \ 328 frameptr, isI8, isInt, isFP) \
322 (*IntegerRegisters)[RegisterSet::val] = isInt; \ 329 (IntegerRegisters)[RegisterSet::val] = isInt; \
323 (*IntegerRegistersI8)[RegisterSet::val] = isI8; \ 330 (IntegerRegistersI8)[RegisterSet::val] = isI8; \
324 (*FloatRegisters)[RegisterSet::val] = isFP; \ 331 (FloatRegisters)[RegisterSet::val] = isFP; \
325 (*VectorRegisters)[RegisterSet::val] = isFP; \ 332 (VectorRegisters)[RegisterSet::val] = isFP; \
333 (*RegisterAliases)[RegisterSet::val].resize(RegisterSet::Reg_NUM); \
334 (*RegisterAliases)[RegisterSet::val].set(RegisterSet::val); \
326 (*ScratchRegs)[RegisterSet::val] = scratch; 335 (*ScratchRegs)[RegisterSet::val] = scratch;
327 REGX8632_TABLE; 336 REGX8632_TABLE;
328 #undef X 337 #undef X
338
339 (*TypeToRegisterSet)[IceType_void] = InvalidRegisters;
340 (*TypeToRegisterSet)[IceType_i1] = IntegerRegistersI8;
341 (*TypeToRegisterSet)[IceType_i8] = IntegerRegistersI8;
342 (*TypeToRegisterSet)[IceType_i16] = IntegerRegisters;
343 (*TypeToRegisterSet)[IceType_i32] = IntegerRegisters;
344 (*TypeToRegisterSet)[IceType_i64] = IntegerRegisters;
345 (*TypeToRegisterSet)[IceType_f32] = FloatRegisters;
346 (*TypeToRegisterSet)[IceType_f64] = FloatRegisters;
347 (*TypeToRegisterSet)[IceType_v4i1] = VectorRegisters;
348 (*TypeToRegisterSet)[IceType_v8i1] = VectorRegisters;
349 (*TypeToRegisterSet)[IceType_v16i1] = VectorRegisters;
350 (*TypeToRegisterSet)[IceType_v16i8] = VectorRegisters;
351 (*TypeToRegisterSet)[IceType_v8i16] = VectorRegisters;
352 (*TypeToRegisterSet)[IceType_v4i32] = VectorRegisters;
353 (*TypeToRegisterSet)[IceType_v4f32] = VectorRegisters;
329 } 354 }
330 355
331 static llvm::SmallBitVector 356 static llvm::SmallBitVector
332 getRegisterSet(TargetLowering::RegSetMask Include, 357 getRegisterSet(TargetLowering::RegSetMask Include,
333 TargetLowering::RegSetMask Exclude) { 358 TargetLowering::RegSetMask Exclude) {
334 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM); 359 llvm::SmallBitVector Registers(RegisterSet::Reg_NUM);
335 360
336 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \ 361 #define X(val, encode, name, name16, name8, scratch, preserved, stackptr, \
337 frameptr, isI8, isInt, isFP) \ 362 frameptr, isI8, isInt, isFP) \
338 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \ 363 if (scratch && (Include & ::Ice::TargetLowering::RegSet_CallerSave)) \
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 741
717 } // end of namespace X86Internal 742 } // end of namespace X86Internal
718 743
719 namespace X8632 { 744 namespace X8632 {
720 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8632>; 745 using Traits = ::Ice::X86Internal::MachineTraits<TargetX8632>;
721 } // end of namespace X8632 746 } // end of namespace X8632
722 747
723 } // end of namespace Ice 748 } // end of namespace Ice
724 749
725 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H 750 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632TRAITS_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698