Commit 35c009f1 by Nicolas Capens

Support integer rvalues as return value.

Change-Id: I23e9b8de20dae93e7aa5ea7f5ff90abeba672b2b Reviewed-on: https://swiftshader-review.googlesource.com/8091Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 9dcefbcb
...@@ -6693,16 +6693,9 @@ namespace sw ...@@ -6693,16 +6693,9 @@ namespace sw
Nucleus::createUnreachable(); Nucleus::createUnreachable();
} }
void Return(bool ret) void Return(RValue<Int> ret)
{ {
Nucleus::createRet(V(Nucleus::createConstantBool(ret))); Nucleus::createRet(ret.value);
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
Nucleus::createUnreachable();
}
void Return(const Int &ret)
{
Nucleus::createRet(ret.loadValue());
Nucleus::setInsertBlock(Nucleus::createBasicBlock()); Nucleus::setInsertBlock(Nucleus::createBasicBlock());
Nucleus::createUnreachable(); Nucleus::createUnreachable();
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
namespace sw namespace sw
{ {
class Bool;
class Byte; class Byte;
class SByte; class SByte;
class Byte4; class Byte4;
...@@ -119,20 +120,26 @@ namespace sw ...@@ -119,20 +120,26 @@ namespace sw
struct type; struct type;
}; };
template<> struct template<>
IntLiteral<Int> struct IntLiteral<Bool>
{
typedef bool type;
};
template<>
struct IntLiteral<Int>
{ {
typedef int type; typedef int type;
}; };
template<> struct template<>
IntLiteral<UInt> struct IntLiteral<UInt>
{ {
typedef unsigned int type; typedef unsigned int type;
}; };
template<> struct template<>
IntLiteral<Long> struct IntLiteral<Long>
{ {
typedef int64_t type; typedef int64_t type;
}; };
...@@ -143,8 +150,8 @@ namespace sw ...@@ -143,8 +150,8 @@ namespace sw
struct type; struct type;
}; };
template<> struct template<>
FloatLiteral<Float> struct FloatLiteral<Float>
{ {
typedef float type; typedef float type;
}; };
...@@ -2224,8 +2231,7 @@ namespace sw ...@@ -2224,8 +2231,7 @@ namespace sw
bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB); bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB);
void Return(); void Return();
void Return(bool ret); void Return(RValue<Int> ret);
void Return(const Int &ret);
template<class T> template<class T>
void Return(const Pointer<T> &ret); void Return(const Pointer<T> &ret);
......
...@@ -6507,16 +6507,9 @@ namespace sw ...@@ -6507,16 +6507,9 @@ namespace sw
Nucleus::createUnreachable(); Nucleus::createUnreachable();
} }
void Return(bool ret) void Return(RValue<Int> ret)
{ {
Nucleus::createRet(Nucleus::createConstantInt(ret)); Nucleus::createRet(ret.value);
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
Nucleus::createUnreachable();
}
void Return(const Int &ret)
{
Nucleus::createRet(ret.loadValue());
Nucleus::setInsertBlock(Nucleus::createBasicBlock()); Nucleus::setInsertBlock(Nucleus::createBasicBlock());
Nucleus::createUnreachable(); Nucleus::createUnreachable();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment