summaryrefslogtreecommitdiff
path: root/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx')
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx10
1 files changed, 8 insertions, 2 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
index e866e05f32c5..7e169993e905 100644
--- a/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
@@ -491,7 +491,7 @@ static typelib_TypeClass cpp_mediate(
long privateSnippetExecutor(long r2, long r3, long r4, long r5, long r6, long firstonstack)
{
register long r0 asm("r0");
- sal_uInt32 nOffsetAndIndex = r0;
+ sal_uInt64 nOffsetAndIndex = r0;
long sp = (long)&firstonstack;
@@ -522,15 +522,21 @@ long privateSnippetExecutor(long r2, long r3, long r4, long r5, long r6, long fi
switch( aType )
{
- case typelib_TypeClass_VOID:
case typelib_TypeClass_BOOLEAN:
case typelib_TypeClass_BYTE:
+ nRegReturn[0] = (unsigned long)(*(unsigned char *)nRegReturn);
+ break;
case typelib_TypeClass_CHAR:
case typelib_TypeClass_UNSIGNED_SHORT:
case typelib_TypeClass_SHORT:
+ nRegReturn[0] = (unsigned long)(*(unsigned short *)nRegReturn);
+ break;
case typelib_TypeClass_ENUM:
case typelib_TypeClass_UNSIGNED_LONG:
case typelib_TypeClass_LONG:
+ nRegReturn[0] = (unsigned long)(*(unsigned int *)nRegReturn);
+ break;
+ case typelib_TypeClass_VOID:
default:
break;
case typelib_TypeClass_FLOAT: