2009-07-12 10:13:39 +00:00
|
|
|
.globl sparc64_of_client_interface
|
|
|
|
|
|
|
|
|
|
.data
|
|
|
|
|
.align 8
|
|
|
|
|
client_globals:
|
|
|
|
|
.skip 64
|
|
|
|
|
|
|
|
|
|
.text
|
|
|
|
|
.align 4
|
|
|
|
|
.register %g2, #scratch
|
|
|
|
|
.register %g3, #scratch
|
|
|
|
|
.register %g6, #scratch
|
|
|
|
|
.register %g7, #scratch
|
|
|
|
|
/*
|
|
|
|
|
make some more space on stack since linux kernel only provides 128 bytes
|
|
|
|
|
without memory to spill registers (used by gcc in -O0 mode)
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
sparc64_of_client_interface:
|
|
|
|
|
/* make sure caller's windows are on caller's stack */
|
|
|
|
|
flushw
|
|
|
|
|
save %sp, -248, %sp
|
|
|
|
|
stx %g1, [%sp + 2047 + 192 + 0]
|
2010-04-16 10:20:06 +00:00
|
|
|
stx %g2, [%sp + 2047 + 192 + 8]
|
|
|
|
|
stx %g3, [%sp + 2047 + 192 + 16]
|
|
|
|
|
stx %g4, [%sp + 2047 + 192 + 24]
|
|
|
|
|
stx %g5, [%sp + 2047 + 192 + 32]
|
|
|
|
|
stx %g6, [%sp + 2047 + 192 + 40]
|
|
|
|
|
stx %g7, [%sp + 2047 + 192 + 48]
|
2009-07-12 10:13:39 +00:00
|
|
|
|
|
|
|
|
call of_client_interface
|
|
|
|
|
mov %i0, %o0
|
|
|
|
|
mov %o0, %i0
|
|
|
|
|
|
|
|
|
|
ldx [%sp + 2047 + 192 + 0], %g1
|
2010-04-16 10:20:06 +00:00
|
|
|
ldx [%sp + 2047 + 192 + 8], %g2
|
|
|
|
|
ldx [%sp + 2047 + 192 + 16], %g3
|
|
|
|
|
ldx [%sp + 2047 + 192 + 24], %g4
|
|
|
|
|
ldx [%sp + 2047 + 192 + 32], %g5
|
|
|
|
|
ldx [%sp + 2047 + 192 + 40], %g6
|
|
|
|
|
ldx [%sp + 2047 + 192 + 48], %g7
|
2009-07-12 10:13:39 +00:00
|
|
|
return %i7+8
|
|
|
|
|
nop
|
|
|
|
|
|