summaryrefslogtreecommitdiff
path: root/bridges/source/cpp_uno/cc50_solaris_sparc/call.s
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/source/cpp_uno/cc50_solaris_sparc/call.s')
-rw-r--r--bridges/source/cpp_uno/cc50_solaris_sparc/call.s199
1 files changed, 0 insertions, 199 deletions
diff --git a/bridges/source/cpp_uno/cc50_solaris_sparc/call.s b/bridges/source/cpp_uno/cc50_solaris_sparc/call.s
deleted file mode 100644
index be4027fda..000000000
--- a/bridges/source/cpp_uno/cc50_solaris_sparc/call.s
+++ /dev/null
@@ -1,199 +0,0 @@
-.global privateSnippetExecutor
-.type privateSnippetExecutor,2
-privateSnippetExecutor:
- ! save %sp, -96, %sp already done in code snippet
- st %i0, [%fp+68]
- st %i1, [%fp+72]
- st %i2, [%fp+76]
- st %i3, [%fp+80]
- st %i4, [%fp+84]
- st %i5, [%fp+88]
- ! %o0: functionIndex, stored by code snippet
- ! %o1: vtableOffset, stored by code snippet
- call cpp_vtable_call
- add %fp, 68, %o2
-.privateSnippetExecutorExceptionPosition:
- subcc %o0, 11, %g0
- be .double
- subcc %o0, 10, %g0
- be .float
- ld [%fp+72], %i0
- ld [%fp+76], %i1
- ret
- restore
-.double:
- ldd [%fp+72], %f0
- ret
- restore
-.float:
- ld [%fp+72], %f0
- ret
- restore
-.size privateSnippetExecutor,(.-privateSnippetExecutor)
-.align 8
-
-
-.global callVirtualMethod
-.type callVirtualMethod,2
-callVirtualMethod:
- ! allocate FIRST stack to have own local registers
- sethi %hi(-96), %g1
- or %g1, %lo(-96), %g1
- subcc %g1, %o5, %g1
- subcc %g1, %o5, %g1
- subcc %g1, %o5, %g1
- subcc %g1, %o5, %g1
- save %sp, %g1, %sp
- ! copy stack longs if necessary
- subcc %i5, 6, %l5
- ble .copyRegisters
- nop
-
- ! prepare source location
- add %i4, 24, %l4
-
- ! prepare real stack
- add %sp, 92, %l3
-
-.copyLong:
- ld [%l4+0], %l0
- st %l0, [%l3]
- add %l4, 4, %l4
- add %l3, 4, %l3
- deccc %l5
- bne .copyLong
- nop
-.copyRegisters:
- mov %i5, %l5
- mov %i4, %l4
-
- ld [%l4], %o0
- add %l4, 4, %l4
- deccc %l5
- ble .doCall
-
- ld [%l4], %o1
- add %l4, 4, %l4
- deccc %l5
- ble .doCall
-
- ld [%l4], %o2
- add %l4, 4, %l4
- deccc %l5
- ble .doCall
-
- ld [%l4], %o3
- add %l4, 4, %l4
- deccc %l5
- ble .doCall
-
- ld [%l4], %o4
- add %l4, 4, %l4
- deccc %l5
- ble .doCall
-
- ld [%l4], %o5
- add %l4, 4, %l4
-
- ! prepare complex return pointer
- st %i2, [%sp+64]
-.doCall:
- ! get virtual table entry
- mov %i1, %l1
- add %l1, 2, %l1
- sll %l1, 2, %l1
- ld [%i0], %l3
- add %l3, %l1, %l1
- ld [%l1], %l0
- jmpl %l0,%o7
- nop
-.callVirtualMethodExceptionPosition:
- ! handle returns
-
- !byte types
- subcc %i3, 2, %l3 ! typelib_TypeClass_BOOLEAN
- be .handleByte
- subcc %i3, 3, %l3 ! typelib_TypeClass_BYTE
- be .handleByte
-
- ! half word types
- subcc %i3, 4, %l3 ! typelib_TypeClass_SHORT
- be .handleShort
- subcc %i3, 5, %l3 ! typelib_TypeClass_UNSIGNED_SHORT
- be .handleShort
- subcc %i3, 1, %l3 ! typelib_TypeClass_CHAR (sal_Unicode==sal_uInt16)
- be .handleShort
-
- ! word types
- subcc %i3, 6, %l3 ! typelib_TypeClass_LONG
- be .handleWord
- subcc %i3, 7, %l3 ! typelib_TypeClass_UNSIGNED_LONG
- be .handleWord
- subcc %i3, 15, %l3 ! typelib_TypeClass_ENUM
- be .handleWord
-
- ! double word types
- subcc %i3, 8, %l3 ! typelib_TypeClass_HYPER
- be .handleDoubleWord
- subcc %i3, 9, %l3 ! typelib_TypeClass_UNSIGNED_HYPER
- be .handleDoubleWord
-
- ! float
- subcc %i3, 10, %l3 ! typelib_TypeClass_FLOAT
- be .handleFloat
-
- ! double
- subcc %i3, 11, %l3 ! typelib_TypeClass_DOUBLE
- be .handleDouble
-
- ! default: return void
- nop ! empty prefetch
- ba .doRestore
- nop
-.handleByte:
- stb %o0, [%i2]
- ba .doRestore
- nop
-.handleShort:
- sth %o0, [%i2]
- ba .doRestore
- nop
-.handleWord:
- st %o0, [%i2]
- ba .doRestore
- nop
-.handleDoubleWord:
- st %o0, [%i2]
- st %o1, [%i2+4]
- ba .doRestore
- nop
-.handleFloat:
- st %f0, [%i2]
- ba .doRestore
- nop
-.handleDouble:
- std %f0, [%fp-8]
- ldd [%fp-8], %o0
- st %o0, [%i2]
- st %o1, [%i2+4]
- ba .doRestore
- nop
-.doRestore:
- ret
- restore ! stack frame for own locals
-.size callVirtualMethod,(.-callVirtualMethod)
-.align 8
-
-.rethrow_handler:
- call __1cG__CrunMex_rethrow_q6F_v_
- nop
-
-.section ".exception_ranges",#alloc
-.word %r_disp32(.privateSnippetExecutorExceptionPosition)
-.word 0
-.word .rethrow_handler-.privateSnippetExecutorExceptionPosition
-.word 0,0
-.word %r_disp32(.callVirtualMethodExceptionPosition)
-.word 0
-.word .rethrow_handler-.callVirtualMethodExceptionPosition
-.word 0,0