mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-09 10:31:14 +00:00
Use template to distinguish between function variants.
GCC 4.4.0 gives an error on the "int" declaration for example saying that it has already been declared (using the "short" one). Using templates here allow the compiler to distinguish between the function to choose. Also, "llvm/Support/DataTypes.h" was not included, leading to error messages about not knowing "uint32_t" for example. Patch by Samuel Tardieu. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57292 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4520dd2b7b
commit
43d9c8cd56
@ -15,6 +15,7 @@
|
||||
#ifndef LLVM_TARGET_IBMCELLSPU_H
|
||||
#define LLVM_TARGET_IBMCELLSPU_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include <iosfwd>
|
||||
|
||||
namespace llvm {
|
||||
@ -33,25 +34,33 @@ namespace llvm {
|
||||
This predicate tests for a signed 10-bit value, returning the 10-bit value
|
||||
as a short if true.
|
||||
*/
|
||||
inline bool isS10Constant(short Value) {
|
||||
template<typename T>
|
||||
inline bool isS10Constant(T Value);
|
||||
|
||||
template<>
|
||||
inline bool isS10Constant<short>(short Value) {
|
||||
int SExtValue = ((int) Value << (32 - 10)) >> (32 - 10);
|
||||
return ((Value > 0 && Value <= (1 << 9) - 1)
|
||||
|| (Value < 0 && (short) SExtValue == Value));
|
||||
}
|
||||
|
||||
inline bool isS10Constant(int Value) {
|
||||
template<>
|
||||
inline bool isS10Constant<int>(int Value) {
|
||||
return (Value >= -(1 << 9) && Value <= (1 << 9) - 1);
|
||||
}
|
||||
|
||||
inline bool isS10Constant(uint32_t Value) {
|
||||
template<>
|
||||
inline bool isS10Constant<uint32_t>(uint32_t Value) {
|
||||
return (Value <= ((1 << 9) - 1));
|
||||
}
|
||||
|
||||
inline bool isS10Constant(int64_t Value) {
|
||||
template<>
|
||||
inline bool isS10Constant<int64_t>(int64_t Value) {
|
||||
return (Value >= -(1 << 9) && Value <= (1 << 9) - 1);
|
||||
}
|
||||
|
||||
inline bool isS10Constant(uint64_t Value) {
|
||||
template<>
|
||||
inline bool isS10Constant<uint64_t>(uint64_t Value) {
|
||||
return (Value <= ((1 << 9) - 1));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user