sparc: Solaris fixes
* /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.
This commit is contained in:
committed by
Richard Henderson
parent
f1560b7bbe
commit
b740ab7cc9
@@ -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):
|
||||
@@ -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):
|
||||
@@ -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
|
||||
@@ -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):
|
||||
@@ -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):
|
||||
@@ -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
|
||||
|
||||
@@ -42,17 +42,18 @@
|
||||
#endif
|
||||
#define L(Y) C1(.L, Y)
|
||||
|
||||
.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
|
||||
|
||||
#define STACK_BIAS 2047
|
||||
|
||||
.text
|
||||
.align 8
|
||||
.globl C(ffi_call_v9)
|
||||
.type C(ffi_call_v9),@function
|
||||
.type C(ffi_call_v9),#function
|
||||
FFI_HIDDEN(C(ffi_call_v9))
|
||||
|
||||
C(ffi_call_v9):
|
||||
@@ -107,73 +108,73 @@ C(ffi_call_v9):
|
||||
|
||||
.align 16
|
||||
2:
|
||||
E SPARC_RET_VOID
|
||||
E(SPARC_RET_VOID)
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_STRUCT
|
||||
E(SPARC_RET_STRUCT)
|
||||
add %sp, STACK_BIAS-64+128+48, %l2
|
||||
sub %sp, 64, %sp
|
||||
b 8f
|
||||
stx %o0, [%l2]
|
||||
E SPARC_RET_UINT8
|
||||
E(SPARC_RET_UINT8)
|
||||
and %o0, 0xff, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SPARC_RET_SINT8
|
||||
E(SPARC_RET_SINT8)
|
||||
sll %o0, 24, %o0
|
||||
sra %o0, 24, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SPARC_RET_UINT16
|
||||
E(SPARC_RET_UINT16)
|
||||
sll %o0, 16, %o0
|
||||
srl %o0, 16, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SPARC_RET_SINT16
|
||||
E(SPARC_RET_SINT16)
|
||||
sll %o0, 16, %o0
|
||||
sra %o0, 16, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SPARC_RET_UINT32
|
||||
E(SPARC_RET_UINT32)
|
||||
srl %o0, 0, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SP_V9_RET_SINT32
|
||||
E(SP_V9_RET_SINT32)
|
||||
sra %o0, 0, %i0
|
||||
return %i7+8
|
||||
stx %o0, [%o2]
|
||||
E SPARC_RET_INT64
|
||||
E(SPARC_RET_INT64)
|
||||
stx %o0, [%i2]
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_INT128
|
||||
E(SPARC_RET_INT128)
|
||||
stx %o0, [%i2]
|
||||
stx %o1, [%i2+8]
|
||||
return %i7+8
|
||||
nop
|
||||
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)
|
||||
std %f2, [%i2+2*4]
|
||||
return %i7+8
|
||||
std %f0, [%o2]
|
||||
E SPARC_RET_F_2
|
||||
E(SPARC_RET_F_2)
|
||||
return %i7+8
|
||||
std %f0, [%o2]
|
||||
E SP_V9_RET_F_3
|
||||
E(SP_V9_RET_F_3)
|
||||
st %f2, [%i2+2*4]
|
||||
nop
|
||||
st %f1, [%i2+1*4]
|
||||
nop
|
||||
E SPARC_RET_F_1
|
||||
E(SPARC_RET_F_1)
|
||||
return %i7+8
|
||||
st %f0, [%o2]
|
||||
|
||||
@@ -213,7 +214,7 @@ E SPARC_RET_F_1
|
||||
|
||||
.align 8
|
||||
.globl C(ffi_go_closure_v9)
|
||||
.type C(ffi_go_closure_v9),@function
|
||||
.type C(ffi_go_closure_v9),#function
|
||||
FFI_HIDDEN(C(ffi_go_closure_v9))
|
||||
|
||||
C(ffi_go_closure_v9):
|
||||
@@ -232,7 +233,7 @@ C(ffi_go_closure_v9):
|
||||
|
||||
.align 8
|
||||
.globl C(ffi_closure_v9)
|
||||
.type C(ffi_closure_v9),@function
|
||||
.type C(ffi_closure_v9),#function
|
||||
FFI_HIDDEN(C(ffi_closure_v9))
|
||||
|
||||
C(ffi_closure_v9):
|
||||
@@ -289,72 +290,72 @@ C(ffi_closure_v9):
|
||||
! that is deallocated by the return.
|
||||
.align 16
|
||||
2:
|
||||
E SPARC_RET_VOID
|
||||
E(SPARC_RET_VOID)
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_STRUCT
|
||||
E(SPARC_RET_STRUCT)
|
||||
ldx [FP-160], %i0
|
||||
ldd [FP-160], %f0
|
||||
b 8f
|
||||
ldx [FP-152], %i1
|
||||
E SPARC_RET_UINT8
|
||||
E(SPARC_RET_UINT8)
|
||||
ldub [FP-160+7], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_SINT8
|
||||
E(SPARC_RET_SINT8)
|
||||
ldsb [FP-160+7], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_UINT16
|
||||
E(SPARC_RET_UINT16)
|
||||
lduh [FP-160+6], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_SINT16
|
||||
E(SPARC_RET_SINT16)
|
||||
ldsh [FP-160+6], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_UINT32
|
||||
E(SPARC_RET_UINT32)
|
||||
lduw [FP-160+4], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SP_V9_RET_SINT32
|
||||
E(SP_V9_RET_SINT32)
|
||||
ldsw [FP-160+4], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_INT64
|
||||
E(SPARC_RET_INT64)
|
||||
ldx [FP-160], %i0
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_INT128
|
||||
E(SPARC_RET_INT128)
|
||||
ldx [FP-160], %i0
|
||||
ldx [FP-160+8], %i1
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_F_8
|
||||
E(SPARC_RET_F_8)
|
||||
ld [FP-160+7*4], %f7
|
||||
nop
|
||||
ld [FP-160+6*4], %f6
|
||||
nop
|
||||
E SPARC_RET_F_6
|
||||
E(SPARC_RET_F_6)
|
||||
ld [FP-160+5*4], %f5
|
||||
nop
|
||||
ld [FP-160+4*4], %f4
|
||||
nop
|
||||
E SPARC_RET_F_4
|
||||
E(SPARC_RET_F_4)
|
||||
ldd [FP-160], %f0
|
||||
ldd [FP-160+8], %f2
|
||||
return %i7+8
|
||||
nop
|
||||
E SPARC_RET_F_2
|
||||
E(SPARC_RET_F_2)
|
||||
ldd [FP-160], %f0
|
||||
return %i7+8
|
||||
nop
|
||||
E SP_V9_RET_F_3
|
||||
E(SP_V9_RET_F_3)
|
||||
ld [FP-160+2*4], %f2
|
||||
nop
|
||||
ld [FP-160+1*4], %f1
|
||||
nop
|
||||
E SPARC_RET_F_1
|
||||
E(SPARC_RET_F_1)
|
||||
ld [FP-160], %f0
|
||||
return %i7+8
|
||||
nop
|
||||
|
||||
Reference in New Issue
Block a user