summaryrefslogtreecommitdiffstats
path: root/source/slang/mangle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/mangle.cpp')
-rw-r--r--source/slang/mangle.cpp59
1 files changed, 31 insertions, 28 deletions
diff --git a/source/slang/mangle.cpp b/source/slang/mangle.cpp
index dc2738d8f..c35ad1e14 100644
--- a/source/slang/mangle.cpp
+++ b/source/slang/mangle.cpp
@@ -78,6 +78,33 @@ namespace Slang
emitVal(context, val);
}
+ void emitBaseType(
+ ManglingContext* context,
+ BaseType baseType)
+ {
+ switch( baseType )
+ {
+ case BaseType::Void: emitRaw(context, "V"); break;
+ case BaseType::Bool: emitRaw(context, "b"); break;
+ case BaseType::Int8: emitRaw(context, "c"); break;
+ case BaseType::Int16: emitRaw(context, "s"); break;
+ case BaseType::Int: emitRaw(context, "i"); break;
+ case BaseType::Int64: emitRaw(context, "I"); break;
+ case BaseType::UInt8: emitRaw(context, "C"); break;
+ case BaseType::UInt16: emitRaw(context, "S"); break;
+ case BaseType::UInt: emitRaw(context, "u"); break;
+ case BaseType::UInt64: emitRaw(context, "U"); break;
+ case BaseType::Half: emitRaw(context, "h"); break;
+ case BaseType::Float: emitRaw(context, "f"); break;
+ case BaseType::Double: emitRaw(context, "d"); break;
+ break;
+
+ default:
+ SLANG_UNEXPECTED("unimplemented case in mangling");
+ break;
+ }
+ }
+
void emitType(
ManglingContext* context,
Type* type)
@@ -86,22 +113,7 @@ namespace Slang
if( auto basicType = dynamic_cast<BasicExpressionType*>(type) )
{
- switch( basicType->baseType )
- {
- case BaseType::Void: emitRaw(context, "V"); break;
- case BaseType::Bool: emitRaw(context, "b"); break;
- case BaseType::Int: emitRaw(context, "i"); break;
- case BaseType::UInt: emitRaw(context, "u"); break;
- case BaseType::UInt64: emitRaw(context, "U"); break;
- case BaseType::Half: emitRaw(context, "h"); break;
- case BaseType::Float: emitRaw(context, "f"); break;
- case BaseType::Double: emitRaw(context, "d"); break;
- break;
-
- default:
- SLANG_UNEXPECTED("unimplemented case in mangling");
- break;
- }
+ emitBaseType(context, basicType->baseType);
}
else if( auto vecType = dynamic_cast<VectorExpressionType*>(type) )
{
@@ -212,19 +224,10 @@ namespace Slang
ManglingContext* context,
IRInst* inst)
{
- switch (inst->op)
+ if(auto basicType = as<IRBasicType>(inst) )
{
- case kIROp_VoidType: emitRaw(context, "V"); return;
- case kIROp_BoolType: emitRaw(context, "b"); return;
- case kIROp_IntType: emitRaw(context, "i"); return;
- case kIROp_UIntType: emitRaw(context, "u"); return;
- case kIROp_UInt64Type: emitRaw(context, "U"); return;
- case kIROp_HalfType: emitRaw(context, "h"); return;
- case kIROp_FloatType: emitRaw(context, "f"); return;
- case kIROp_DoubleType: emitRaw(context, "d"); return;
-
- default:
- break;
+ emitBaseType(context, basicType->getBaseType());
+ return;
}
if (auto globalVal = as<IRGlobalValue>(inst))