Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
swiftshader
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
swiftshader
Commits
57ec7dfe
Commit
57ec7dfe
authored
Jan 15, 2016
by
Karl Schimpf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make RegARM32 a namespace rather than a class.
Cleans up code by removing unnecessary class. BUG=None R=stichnot@chromium.org Review URL:
https://codereview.chromium.org/1581803009
.
parent
bba77687
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
194 additions
and
200 deletions
+194
-200
IceInstARM32.cpp
src/IceInstARM32.cpp
+1
-1
IceRegistersARM32.h
src/IceRegistersARM32.h
+147
-195
IceTargetLoweringARM32.cpp
src/IceTargetLoweringARM32.cpp
+45
-3
IceTargetLoweringARM32.h
src/IceTargetLoweringARM32.h
+1
-1
No files found.
src/IceInstARM32.cpp
View file @
57ec7dfe
...
@@ -757,7 +757,7 @@ void InstARM32RegisterStackOp::emitSRegsAsText(const Cfg *Func,
...
@@ -757,7 +757,7 @@ void InstARM32RegisterStackOp::emitSRegsAsText(const Cfg *Func,
IsFirst
=
false
;
IsFirst
=
false
;
else
else
Str
<<
", "
;
Str
<<
", "
;
Str
<<
RegARM32
::
get
S
RegName
(
Base
+
i
);
Str
<<
RegARM32
::
getRegName
(
Base
+
i
);
}
}
Str
<<
"}"
;
Str
<<
"}"
;
}
}
...
...
src/IceRegistersARM32.h
View file @
57ec7dfe
...
@@ -22,255 +22,207 @@
...
@@ -22,255 +22,207 @@
namespace
Ice
{
namespace
Ice
{
namespace
ARM32
{
namespace
ARM32
{
namespace
RegARM32
{
/// SizeOf is used to obtain the size of an initializer list as a constexpr
/// An enum of every register. The enum value may not match the encoding used
/// expression. This is only needed until our C++ library is updated to
/// to binary encode register operands in instructions.
/// C++ 14 -- which defines constexpr members to std::initializer_list.
enum
AllRegisters
{
class
SizeOf
{
SizeOf
(
const
SizeOf
&
)
=
delete
;
SizeOf
&
operator
=
(
const
SizeOf
&
)
=
delete
;
public
:
constexpr
SizeOf
()
:
Size
(
0
)
{}
template
<
typename
...
T
>
explicit
constexpr
SizeOf
(
T
...)
:
Size
(
__length
<
T
...
>::
value
)
{}
constexpr
SizeT
size
()
const
{
return
Size
;
}
private
:
template
<
typename
T
,
typename
...
U
>
struct
__length
{
static
constexpr
std
::
size_t
value
=
1
+
__length
<
U
...
>::
value
;
};
template
<
typename
T
>
struct
__length
<
T
>
{
static
constexpr
std
::
size_t
value
=
1
;
};
const
std
::
size_t
Size
;
};
class
RegARM32
{
private
:
RegARM32
()
=
delete
;
RegARM32
(
const
RegARM32
&
)
=
delete
;
RegARM32
&
operator
=
(
const
RegARM32
&
)
=
delete
;
~
RegARM32
()
=
delete
;
public
:
/// An enum of every register. The enum value may not match the encoding used
/// to binary encode register operands in instructions.
enum
AllRegisters
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
val,
val,
REGARM32_TABLE
REGARM32_TABLE
#undef X
#undef X
Reg_NUM
,
Reg_NUM
,
#define X(val, init) val init,
#define X(val, init) val init,
REGARM32_TABLE_BOUNDS
REGARM32_TABLE_BOUNDS
#undef X
#undef X
};
};
/// An enum of GPR Registers. The enum value does match the encoding used to
/// An enum of GPR Registers. The enum value does match the encoding used to
/// binary encode register operands in instructions.
/// binary encode register operands in instructions.
enum
GPRRegister
{
enum
GPRRegister
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
Encoded_##val = encode,
Encoded_##val = encode,
REGARM32_GPR_TABLE
REGARM32_GPR_TABLE
#undef X
#undef X
Encoded_Not_GPR
=
-
1
Encoded_Not_GPR
=
-
1
};
};
/// An enum of FP32 S-Registers. The enum value does match the encoding used
/// An enum of FP32 S-Registers. The enum value does match the encoding used
/// to binary encode register operands in instructions.
/// to binary encode register operands in instructions.
enum
SRegister
{
enum
SRegister
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
Encoded_##val = encode,
Encoded_##val = encode,
REGARM32_FP32_TABLE
REGARM32_FP32_TABLE
#undef X
#undef X
Encoded_Not_SReg
=
-
1
Encoded_Not_SReg
=
-
1
};
};
/// An enum of FP64 D-Registers. The enum value does match the encoding used
/// An enum of FP64 D-Registers. The enum value does match the encoding used
/// to binary encode register operands in instructions.
/// to binary encode register operands in instructions.
enum
DRegister
{
enum
DRegister
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
Encoded_##val = encode,
Encoded_##val = encode,
REGARM32_FP64_TABLE
REGARM32_FP64_TABLE
#undef X
#undef X
Encoded_Not_DReg
=
-
1
Encoded_Not_DReg
=
-
1
};
};
/// An enum of 128-bit Q-Registers. The enum value does match the encoding
/// An enum of 128-bit Q-Registers. The enum value does match the encoding
/// used to binary encode register operands in instructions.
/// used to binary encode register operands in instructions.
enum
QRegister
{
enum
QRegister
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
Encoded_##val = encode,
Encoded_##val = encode,
REGARM32_VEC128_TABLE
REGARM32_VEC128_TABLE
#undef X
#undef X
Encoded_Not_QReg
=
-
1
Encoded_Not_QReg
=
-
1
};
};
static
constexpr
struct
TableType
{
extern
struct
Reg
TableType
{
const
char
*
Name
;
const
char
*
Name
;
unsigned
Encoding
:
10
;
unsigned
Encoding
:
10
;
unsigned
CCArg
:
6
;
unsigned
CCArg
:
6
;
unsigned
Scratch
:
1
;
unsigned
Scratch
:
1
;
unsigned
Preserved
:
1
;
unsigned
Preserved
:
1
;
unsigned
StackPtr
:
1
;
unsigned
StackPtr
:
1
;
unsigned
FramePtr
:
1
;
unsigned
FramePtr
:
1
;
unsigned
IsGPR
:
1
;
unsigned
IsGPR
:
1
;
unsigned
IsInt
:
1
;
unsigned
IsInt
:
1
;
unsigned
IsI64Pair
:
1
;
unsigned
IsI64Pair
:
1
;
unsigned
IsFP32
:
1
;
unsigned
IsFP32
:
1
;
unsigned
IsFP64
:
1
;
unsigned
IsFP64
:
1
;
unsigned
IsVec128
:
1
;
unsigned
IsVec128
:
1
;
#define NUM_ALIASES_BITS 3
#define NUM_ALIASES_BITS 3
SizeT
NumAliases
:
(
NUM_ALIASES_BITS
+
1
);
SizeT
NumAliases
:
(
NUM_ALIASES_BITS
+
1
);
uint16_t
Aliases
[
1
<<
NUM_ALIASES_BITS
];
uint16_t
Aliases
[
1
<<
NUM_ALIASES_BITS
];
#undef NUM_ALIASES_BITS
#undef NUM_ALIASES_BITS
}
Table
[
Reg_NUM
]
=
{
}
RegTable
[
Reg_NUM
];
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
{ \
name, encode, cc_arg, scratch, preserved, stackptr, frameptr, isGPR, \
isInt, isI64Pair, isFP32, isFP64, isVec128, \
(SizeOf alias_init).size(), alias_init \
} \
,
REGARM32_TABLE
#undef X
};
static
inline
void
assertRegisterDefined
(
int32_t
RegNum
)
{
(
void
)
RegNum
;
assert
(
RegNum
>=
0
);
assert
(
RegNum
<
Reg_NUM
);
}
static
inline
bool
isGPRegister
(
int32_t
RegNum
)
{
static
inline
bool
isGPRegister
(
int32_t
RegNum
)
{
assertRegisterDefined
(
RegNum
);
assert
(
RegNum
>=
0
);
return
Table
[
RegNum
].
IsGPR
;
assert
(
RegNum
<
Reg_NUM
);
}
return
RegTable
[
RegNum
].
IsGPR
;
}
static
constexpr
SizeT
getNumGPRegs
()
{
static
constexpr
inline
SizeT
getNumGPRegs
()
{
return
0
return
0
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
+(isGPR)
+(isGPR)
REGARM32_TABLE
REGARM32_TABLE
#undef X
#undef X
;
;
}
}
static
inline
GPRRegister
getEncodedGPR
(
int32_t
RegNum
)
{
static
inline
GPRRegister
getEncodedGPR
(
int32_t
RegNum
)
{
assert
(
isGPRegister
(
RegNum
));
assert
(
RegNum
>=
0
);
return
GPRRegister
(
Table
[
RegNum
].
Encoding
);
assert
(
RegNum
<
Reg_NUM
);
}
return
GPRRegister
(
RegTable
[
RegNum
].
Encoding
);
}
static
constexpr
SizeT
getNumGPRs
()
{
static
constexpr
inline
SizeT
getNumGPRs
()
{
return
0
return
0
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
+(isGPR)
+(isGPR)
REGARM32_TABLE
REGARM32_TABLE
#undef X
#undef X
;
;
}
}
static
inline
bool
isGPR
(
SizeT
RegNum
)
{
static
inline
bool
isGPR
(
int32_t
RegNum
)
{
assertRegisterDefined
(
RegNum
);
assert
(
RegNum
>=
0
);
return
Table
[
RegNum
].
IsGPR
;
assert
(
RegNum
<
Reg_NUM
)
;
}
return
RegTable
[
RegNum
].
IsGPR
;
}
static
inline
IceString
getGPRName
(
SizeT
RegNum
)
{
assert
(
isGPR
(
RegNum
));
static
inline
GPRRegister
getI64PairFirstGPRNum
(
int32_t
RegNum
)
{
return
Table
[
RegNum
].
Name
;
assert
(
RegNum
>=
0
)
;
}
assert
(
RegNum
<
Reg_NUM
);
return
GPRRegister
(
RegTable
[
RegNum
].
Encoding
);
static
inline
GPRRegister
getI64PairFirstGPRNum
(
int32_t
RegNum
)
{
}
assert
(
isI64RegisterPair
(
RegNum
));
return
GPRRegister
(
Table
[
RegNum
].
Encoding
);
static
inline
GPRRegister
getI64PairSecondGPRNum
(
int32_t
RegNum
)
{
}
assert
(
RegNum
>=
0
);
assert
(
RegNum
<
Reg_NUM
);
static
inline
GPRRegister
getI64PairSecondGPRNum
(
int32_t
RegNum
)
{
return
GPRRegister
(
RegTable
[
RegNum
].
Encoding
+
1
);
assert
(
isI64RegisterPair
(
RegNum
));
}
return
GPRRegister
(
Table
[
RegNum
].
Encoding
+
1
);
}
static
inline
bool
isI64RegisterPair
(
int32_t
RegNum
)
{
assert
(
RegNum
>=
0
);
static
inline
bool
isI64RegisterPair
(
int32_t
RegNum
)
{
assert
(
RegNum
<
Reg_NUM
);
assertRegisterDefined
(
RegNum
)
;
return
RegTable
[
RegNum
].
IsI64Pair
;
return
Table
[
RegNum
].
IsI64Pair
;
}
}
static
inline
bool
isEncodedSReg
(
int32_t
RegNum
)
{
static
inline
bool
isEncodedSReg
(
int32_t
RegNum
)
{
assert
(
RegNum
>=
0
);
assertRegisterDefined
(
RegNum
);
assert
(
RegNum
<
Reg_NUM
);
return
Table
[
RegNum
].
IsFP32
;
return
Reg
Table
[
RegNum
].
IsFP32
;
}
}
static
constexpr
SizeT
getNumSRegs
()
{
static
constexpr
inline
SizeT
getNumSRegs
()
{
return
0
return
0
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
+(isFP32)
+(isFP32)
REGARM32_TABLE
REGARM32_TABLE
#undef X
#undef X
;
;
}
}
static
inline
IceString
getSRegName
(
SizeT
RegNum
)
{
static
inline
SRegister
getEncodedSReg
(
int32_t
RegNum
)
{
assert
(
isEncodedSReg
(
RegNum
));
assert
(
RegNum
>=
0
);
return
Table
[
RegNum
].
Name
;
assert
(
RegNum
<
Reg_NUM
);
}
return
SRegister
(
RegTable
[
RegNum
].
Encoding
);
}
static
inline
SRegister
getEncodedSReg
(
int32_t
RegNum
)
{
assert
(
isEncodedSReg
(
RegNum
));
static
inline
bool
isEncodedDReg
(
int32_t
RegNum
)
{
return
SRegister
(
Table
[
RegNum
].
Encoding
);
assert
(
RegNum
>=
0
);
}
assert
(
RegNum
<
Reg_NUM
);
return
RegTable
[
RegNum
].
IsFP64
;
static
inline
bool
isEncodedDReg
(
int32_t
RegNum
)
{
}
assertRegisterDefined
(
RegNum
);
return
Table
[
RegNum
].
IsFP64
;
static
constexpr
inline
SizeT
getNumDRegs
()
{
}
return
0
static
constexpr
inline
SizeT
getNumDRegs
()
{
return
0
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
+(isFP64)
+(isFP64)
REGARM32_TABLE
REGARM32_TABLE
#undef X
#undef X
;
;
}
}
static
inline
DRegister
getEncodedDReg
(
int32_t
RegNum
)
{
static
inline
DRegister
getEncodedDReg
(
int32_t
RegNum
)
{
assert
(
isEncodedDReg
(
RegNum
));
assert
(
RegNum
>=
0
);
return
DRegister
(
Table
[
RegNum
].
Encoding
);
assert
(
RegNum
<
Reg_NUM
);
}
return
DRegister
(
RegTable
[
RegNum
].
Encoding
);
}
static
inline
bool
isEncodedQReg
(
int32_t
RegNum
)
{
assertRegisterDefined
(
RegNum
);
static
inline
bool
isEncodedQReg
(
int32_t
RegNum
)
{
return
Table
[
RegNum
].
IsVec128
;
assert
(
RegNum
>=
0
);
}
assert
(
RegNum
<
Reg_NUM
);
return
RegTable
[
RegNum
].
IsVec128
;
static
inline
QRegister
getEncodedQReg
(
int32_t
RegNum
)
{
}
assert
(
isEncodedQReg
(
RegNum
));
return
QRegister
(
Table
[
RegNum
].
Encoding
);
static
inline
QRegister
getEncodedQReg
(
int32_t
RegNum
)
{
}
assert
(
isEncodedQReg
(
RegNum
));
return
QRegister
(
RegTable
[
RegNum
].
Encoding
);
static
inline
IceString
getRegName
(
int32_t
RegNum
)
{
}
assertRegisterDefined
(
RegNum
);
return
Table
[
RegNum
].
Name
;
static
inline
IceString
getRegName
(
int32_t
RegNum
)
{
}
assert
(
RegNum
>=
0
);
};
assert
(
RegNum
<
Reg_NUM
);
return
RegTable
[
RegNum
].
Name
;
}
// Extend enum RegClass with ARM32-specific register classes (if any).
// Extend enum RegClass with ARM32-specific register classes (if any).
enum
RegClassARM32
:
uint8_t
{
RCARM32_NUM
=
RC_Target
};
enum
RegClassARM32
:
uint8_t
{
RCARM32_NUM
=
RC_Target
};
}
// end of namespace RegARM32
}
// end of namespace ARM32
}
// end of namespace ARM32
}
// end of namespace Ice
}
// end of namespace Ice
...
...
src/IceTargetLoweringARM32.cpp
View file @
57ec7dfe
...
@@ -53,13 +53,55 @@ createTargetHeaderLowering(::Ice::GlobalContext *Ctx) {
...
@@ -53,13 +53,55 @@ createTargetHeaderLowering(::Ice::GlobalContext *Ctx) {
void
staticInit
(
const
::
Ice
::
ClFlags
&
Flags
)
{
void
staticInit
(
const
::
Ice
::
ClFlags
&
Flags
)
{
::
Ice
::
ARM32
::
TargetARM32
::
staticInit
(
Flags
);
::
Ice
::
ARM32
::
TargetARM32
::
staticInit
(
Flags
);
}
}
}
// end of namespace ARM32
}
// end of namespace ARM32
namespace
Ice
{
namespace
Ice
{
namespace
ARM32
{
namespace
ARM32
{
namespace
{
/// SizeOf is used to obtain the size of an initializer list as a constexpr
/// expression. This is only needed until our C++ library is updated to
/// C++ 14 -- which defines constexpr members to std::initializer_list.
class
SizeOf
{
SizeOf
(
const
SizeOf
&
)
=
delete
;
SizeOf
&
operator
=
(
const
SizeOf
&
)
=
delete
;
public
:
constexpr
SizeOf
()
:
Size
(
0
)
{}
template
<
typename
...
T
>
explicit
constexpr
SizeOf
(
T
...)
:
Size
(
__length
<
T
...
>::
value
)
{}
constexpr
SizeT
size
()
const
{
return
Size
;
}
private
:
template
<
typename
T
,
typename
...
U
>
struct
__length
{
static
constexpr
std
::
size_t
value
=
1
+
__length
<
U
...
>::
value
;
};
template
<
typename
T
>
struct
__length
<
T
>
{
static
constexpr
std
::
size_t
value
=
1
;
};
const
std
::
size_t
Size
;
};
}
// end of anonymous namespace
// Defines the RegARM32::Table table with register information.
// Defines the RegARM32::Table table with register information.
constexpr
RegARM32
::
TableType
RegARM32
::
Table
[];
RegARM32
::
RegTableType
RegARM32
::
RegTable
[
RegARM32
::
Reg_NUM
]
=
{
#define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \
isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \
{ \
name, encode, cc_arg, scratch, preserved, stackptr, frameptr, isGPR, \
isInt, isI64Pair, isFP32, isFP64, isVec128, \
(SizeOf alias_init).size(), alias_init \
} \
,
REGARM32_TABLE
#undef X
};
namespace
{
namespace
{
...
@@ -246,7 +288,7 @@ void TargetARM32::staticInit(const ClFlags &Flags) {
...
@@ -246,7 +288,7 @@ void TargetARM32::staticInit(const ClFlags &Flags) {
llvm
::
SmallBitVector
InvalidRegisters
(
RegARM32
::
Reg_NUM
);
llvm
::
SmallBitVector
InvalidRegisters
(
RegARM32
::
Reg_NUM
);
ScratchRegs
.
resize
(
RegARM32
::
Reg_NUM
);
ScratchRegs
.
resize
(
RegARM32
::
Reg_NUM
);
for
(
int
i
=
0
;
i
<
RegARM32
::
Reg_NUM
;
++
i
)
{
for
(
int
i
=
0
;
i
<
RegARM32
::
Reg_NUM
;
++
i
)
{
const
auto
&
Entry
=
RegARM32
::
Table
[
i
];
const
auto
&
Entry
=
RegARM32
::
Reg
Table
[
i
];
IntegerRegisters
[
i
]
=
Entry
.
IsInt
;
IntegerRegisters
[
i
]
=
Entry
.
IsInt
;
I64PairRegisters
[
i
]
=
Entry
.
IsI64Pair
;
I64PairRegisters
[
i
]
=
Entry
.
IsI64Pair
;
Float32Registers
[
i
]
=
Entry
.
IsFP32
;
Float32Registers
[
i
]
=
Entry
.
IsFP32
;
...
@@ -1833,7 +1875,7 @@ llvm::SmallBitVector TargetARM32::getRegisterSet(RegSetMask Include,
...
@@ -1833,7 +1875,7 @@ llvm::SmallBitVector TargetARM32::getRegisterSet(RegSetMask Include,
llvm
::
SmallBitVector
Registers
(
RegARM32
::
Reg_NUM
);
llvm
::
SmallBitVector
Registers
(
RegARM32
::
Reg_NUM
);
for
(
int
i
=
0
;
i
<
RegARM32
::
Reg_NUM
;
++
i
)
{
for
(
int
i
=
0
;
i
<
RegARM32
::
Reg_NUM
;
++
i
)
{
const
auto
&
Entry
=
RegARM32
::
Table
[
i
];
const
auto
&
Entry
=
RegARM32
::
Reg
Table
[
i
];
if
(
Entry
.
Scratch
&&
(
Include
&
RegSet_CallerSave
))
if
(
Entry
.
Scratch
&&
(
Include
&
RegSet_CallerSave
))
Registers
[
i
]
=
true
;
Registers
[
i
]
=
true
;
if
(
Entry
.
Preserved
&&
(
Include
&
RegSet_CalleeSave
))
if
(
Entry
.
Preserved
&&
(
Include
&
RegSet_CalleeSave
))
...
...
src/IceTargetLoweringARM32.h
View file @
57ec7dfe
...
@@ -1012,7 +1012,7 @@ protected:
...
@@ -1012,7 +1012,7 @@ protected:
bool
PrologEmitsFixedAllocas
=
false
;
bool
PrologEmitsFixedAllocas
=
false
;
uint32_t
MaxOutArgsSizeBytes
=
0
;
uint32_t
MaxOutArgsSizeBytes
=
0
;
// TODO(jpp): std::array instead of array.
// TODO(jpp): std::array instead of array.
static
llvm
::
SmallBitVector
TypeToRegisterSet
[
RCARM32_NUM
];
static
llvm
::
SmallBitVector
TypeToRegisterSet
[
R
egARM32
::
R
CARM32_NUM
];
static
llvm
::
SmallBitVector
RegisterAliases
[
RegARM32
::
Reg_NUM
];
static
llvm
::
SmallBitVector
RegisterAliases
[
RegARM32
::
Reg_NUM
];
static
llvm
::
SmallBitVector
ScratchRegs
;
static
llvm
::
SmallBitVector
ScratchRegs
;
llvm
::
SmallBitVector
RegsUsed
;
llvm
::
SmallBitVector
RegsUsed
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment