Skip to content

Commit

Permalink
sparc: Solaris fixes
Browse files Browse the repository at this point in the history
* /bin/as requires .type fn,#function instead of @function.
* /bin/as doesn't support .macro/.endm.  I'm using preprocessor macros
  instead to implement E in src/sparc/v[89].S.
  • Loading branch information
rorth authored and rth7680 committed Jan 16, 2015
1 parent f1560b7 commit b740ab7
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 79 deletions.
81 changes: 41 additions & 40 deletions src/sparc/v8.S
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
#ifndef __GNUC__
.align 8
.globl C(ffi_flush_icache)
.type C(ffi_flush_icache),@function
.type C(ffi_flush_icache),#function
FFI_HIDDEN(C(ffi_flush_icache))

C(ffi_flush_icache):
Expand All @@ -66,14 +66,15 @@ C(ffi_flush_icache):
.size C(ffi_flush_icache), . - C(ffi_flush_icache)
#endif

.macro E index
.align 16
.org 2b + \index * 16
.endm
#if defined(__sun__) && defined(__svr4__)
# define E(INDEX) .align 16
#else
# define E(INDEX) .align 16; .org 2b + INDEX * 16
#endif

.align 8
.globl C(ffi_call_v8)
.type C(ffi_call_v8),@function
.type C(ffi_call_v8),#function
FFI_HIDDEN(C(ffi_call_v8))

C(ffi_call_v8):
Expand Down Expand Up @@ -114,71 +115,71 @@ C(ffi_call_v8):
! Note that each entry is 4 insns, enforced by the E macro.
.align 16
2:
E SPARC_RET_VOID
E(SPARC_RET_VOID)
ret
restore
E SPARC_RET_STRUCT
E(SPARC_RET_STRUCT)
unimp
E SPARC_RET_UINT8
E(SPARC_RET_UINT8)
and %o0, 0xff, %o0
st %o0, [%i2]
ret
restore
E SPARC_RET_SINT8
E(SPARC_RET_SINT8)
sll %o0, 24, %o0
b 7f
sra %o0, 24, %o0
E SPARC_RET_UINT16
E(SPARC_RET_UINT16)
sll %o0, 16, %o0
b 7f
srl %o0, 16, %o0
E SPARC_RET_SINT16
E(SPARC_RET_SINT16)
sll %o0, 16, %o0
b 7f
sra %o0, 16, %o0
E SPARC_RET_UINT32
E(SPARC_RET_UINT32)
7: st %o0, [%i2]
ret
restore
E SP_V8_RET_CPLX16
E(SP_V8_RET_CPLX16)
sth %o0, [%i2+2]
b 9f
srl %o0, 16, %o0
E SPARC_RET_INT64
E(SPARC_RET_INT64)
st %o0, [%i2]
st %o1, [%i2+4]
ret
restore
E SPARC_RET_INT128
E(SPARC_RET_INT128)
std %o0, [%i2]
std %o2, [%i2+8]
ret
restore
E SPARC_RET_F_8
E(SPARC_RET_F_8)
st %f7, [%i2+7*4]
nop
st %f6, [%i2+6*4]
nop
E SPARC_RET_F_6
E(SPARC_RET_F_6)
st %f5, [%i2+5*4]
nop
st %f4, [%i2+4*4]
nop
E SPARC_RET_F_4
E(SPARC_RET_F_4)
st %f3, [%i2+3*4]
nop
st %f2, [%i2+2*4]
nop
E SPARC_RET_F_2
E(SPARC_RET_F_2)
st %f1, [%i2+4]
st %f0, [%i2]
ret
restore
E SP_V8_RET_CPLX8
E(SP_V8_RET_CPLX8)
stb %o0, [%i2+1]
b 10f
srl %o0, 8, %o0
E SPARC_RET_F_1
E(SPARC_RET_F_1)
st %f0, [%i2]
ret
restore
Expand Down Expand Up @@ -231,7 +232,7 @@ E SPARC_RET_F_1

.align 8
.globl C(ffi_go_closure_v8)
.type C(ffi_go_closure_v8),@function
.type C(ffi_go_closure_v8),#function
FFI_HIDDEN(C(ffi_go_closure_v8))

C(ffi_go_closure_v8):
Expand All @@ -249,7 +250,7 @@ C(ffi_go_closure_v8):

.align 8
.globl C(ffi_closure_v8)
.type C(ffi_closure_v8),@function
.type C(ffi_closure_v8),#function
FFI_HIDDEN(C(ffi_closure_v8))

C(ffi_closure_v8):
Expand Down Expand Up @@ -285,70 +286,70 @@ C(ffi_closure_v8):
! Note that each entry is 4 insns, enforced by the E macro.
.align 16
2:
E SPARC_RET_VOID
E(SPARC_RET_VOID)
ret
restore
E SPARC_RET_STRUCT
E(SPARC_RET_STRUCT)
ld [%i2], %i0
jmp %i7+12
restore
E SPARC_RET_UINT8
E(SPARC_RET_UINT8)
ldub [%i2+3], %i0
ret
restore
E SPARC_RET_SINT8
E(SPARC_RET_SINT8)
ldsb [%i2+3], %i0
ret
restore
E SPARC_RET_UINT16
E(SPARC_RET_UINT16)
lduh [%i2+2], %i0
ret
restore
E SPARC_RET_SINT16
E(SPARC_RET_SINT16)
ldsh [%i2+2], %i0
ret
restore
E SPARC_RET_UINT32
E(SPARC_RET_UINT32)
ld [%i2], %i0
ret
restore
E SP_V8_RET_CPLX16
E(SP_V8_RET_CPLX16)
ld [%i2], %i0
ret
restore
E SPARC_RET_INT64
E(SPARC_RET_INT64)
ldd [%i2], %i0
ret
restore
E SPARC_RET_INT128
E(SPARC_RET_INT128)
ldd [%i2], %i0
ldd [%i2+8], %i2
ret
restore
E SPARC_RET_F_8
E(SPARC_RET_F_8)
ld [%i2+7*4], %f7
nop
ld [%i2+6*4], %f6
nop
E SPARC_RET_F_6
E(SPARC_RET_F_6)
ld [%i2+5*4], %f5
nop
ld [%i2+4*4], %f4
nop
E SPARC_RET_F_4
E(SPARC_RET_F_4)
ld [%i2+3*4], %f3
nop
ld [%i2+2*4], %f2
nop
E SPARC_RET_F_2
E(SPARC_RET_F_2)
ldd [%i2], %f0
ret
restore
E SP_V8_RET_CPLX8
E(SP_V8_RET_CPLX8)
lduh [%i2], %i0
ret
restore
E SPARC_RET_F_1
E(SPARC_RET_F_1)
ld [%i2], %f0
ret
restore
Expand Down
Loading

0 comments on commit b740ab7

Please sign in to comment.