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:
Rainer Orth
2015-01-16 11:32:23 -08:00
committed by Richard Henderson
parent f1560b7bbe
commit b740ab7cc9
2 changed files with 81 additions and 79 deletions
+41 -40
View File
@@ -48,7 +48,7 @@
#ifndef __GNUC__ #ifndef __GNUC__
.align 8 .align 8
.globl C(ffi_flush_icache) .globl C(ffi_flush_icache)
.type C(ffi_flush_icache),@function .type C(ffi_flush_icache),#function
FFI_HIDDEN(C(ffi_flush_icache)) FFI_HIDDEN(C(ffi_flush_icache))
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) .size C(ffi_flush_icache), . - C(ffi_flush_icache)
#endif #endif
.macro E index #if defined(__sun__) && defined(__svr4__)
.align 16 # define E(INDEX) .align 16
.org 2b + \index * 16 #else
.endm # define E(INDEX) .align 16; .org 2b + INDEX * 16
#endif
.align 8 .align 8
.globl C(ffi_call_v8) .globl C(ffi_call_v8)
.type C(ffi_call_v8),@function .type C(ffi_call_v8),#function
FFI_HIDDEN(C(ffi_call_v8)) FFI_HIDDEN(C(ffi_call_v8))
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. ! Note that each entry is 4 insns, enforced by the E macro.
.align 16 .align 16
2: 2:
E SPARC_RET_VOID E(SPARC_RET_VOID)
ret ret
restore restore
E SPARC_RET_STRUCT E(SPARC_RET_STRUCT)
unimp unimp
E SPARC_RET_UINT8 E(SPARC_RET_UINT8)
and %o0, 0xff, %o0 and %o0, 0xff, %o0
st %o0, [%i2] st %o0, [%i2]
ret ret
restore restore
E SPARC_RET_SINT8 E(SPARC_RET_SINT8)
sll %o0, 24, %o0 sll %o0, 24, %o0
b 7f b 7f
sra %o0, 24, %o0 sra %o0, 24, %o0
E SPARC_RET_UINT16 E(SPARC_RET_UINT16)
sll %o0, 16, %o0 sll %o0, 16, %o0
b 7f b 7f
srl %o0, 16, %o0 srl %o0, 16, %o0
E SPARC_RET_SINT16 E(SPARC_RET_SINT16)
sll %o0, 16, %o0 sll %o0, 16, %o0
b 7f b 7f
sra %o0, 16, %o0 sra %o0, 16, %o0
E SPARC_RET_UINT32 E(SPARC_RET_UINT32)
7: st %o0, [%i2] 7: st %o0, [%i2]
ret ret
restore restore
E SP_V8_RET_CPLX16 E(SP_V8_RET_CPLX16)
sth %o0, [%i2+2] sth %o0, [%i2+2]
b 9f b 9f
srl %o0, 16, %o0 srl %o0, 16, %o0
E SPARC_RET_INT64 E(SPARC_RET_INT64)
st %o0, [%i2] st %o0, [%i2]
st %o1, [%i2+4] st %o1, [%i2+4]
ret ret
restore restore
E SPARC_RET_INT128 E(SPARC_RET_INT128)
std %o0, [%i2] std %o0, [%i2]
std %o2, [%i2+8] std %o2, [%i2+8]
ret ret
restore restore
E SPARC_RET_F_8 E(SPARC_RET_F_8)
st %f7, [%i2+7*4] st %f7, [%i2+7*4]
nop nop
st %f6, [%i2+6*4] st %f6, [%i2+6*4]
nop nop
E SPARC_RET_F_6 E(SPARC_RET_F_6)
st %f5, [%i2+5*4] st %f5, [%i2+5*4]
nop nop
st %f4, [%i2+4*4] st %f4, [%i2+4*4]
nop nop
E SPARC_RET_F_4 E(SPARC_RET_F_4)
st %f3, [%i2+3*4] st %f3, [%i2+3*4]
nop nop
st %f2, [%i2+2*4] st %f2, [%i2+2*4]
nop nop
E SPARC_RET_F_2 E(SPARC_RET_F_2)
st %f1, [%i2+4] st %f1, [%i2+4]
st %f0, [%i2] st %f0, [%i2]
ret ret
restore restore
E SP_V8_RET_CPLX8 E(SP_V8_RET_CPLX8)
stb %o0, [%i2+1] stb %o0, [%i2+1]
b 10f b 10f
srl %o0, 8, %o0 srl %o0, 8, %o0
E SPARC_RET_F_1 E(SPARC_RET_F_1)
st %f0, [%i2] st %f0, [%i2]
ret ret
restore restore
@@ -231,7 +232,7 @@ E SPARC_RET_F_1
.align 8 .align 8
.globl C(ffi_go_closure_v8) .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)) FFI_HIDDEN(C(ffi_go_closure_v8))
C(ffi_go_closure_v8): C(ffi_go_closure_v8):
@@ -249,7 +250,7 @@ C(ffi_go_closure_v8):
.align 8 .align 8
.globl C(ffi_closure_v8) .globl C(ffi_closure_v8)
.type C(ffi_closure_v8),@function .type C(ffi_closure_v8),#function
FFI_HIDDEN(C(ffi_closure_v8)) FFI_HIDDEN(C(ffi_closure_v8))
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. ! Note that each entry is 4 insns, enforced by the E macro.
.align 16 .align 16
2: 2:
E SPARC_RET_VOID E(SPARC_RET_VOID)
ret ret
restore restore
E SPARC_RET_STRUCT E(SPARC_RET_STRUCT)
ld [%i2], %i0 ld [%i2], %i0
jmp %i7+12 jmp %i7+12
restore restore
E SPARC_RET_UINT8 E(SPARC_RET_UINT8)
ldub [%i2+3], %i0 ldub [%i2+3], %i0
ret ret
restore restore
E SPARC_RET_SINT8 E(SPARC_RET_SINT8)
ldsb [%i2+3], %i0 ldsb [%i2+3], %i0
ret ret
restore restore
E SPARC_RET_UINT16 E(SPARC_RET_UINT16)
lduh [%i2+2], %i0 lduh [%i2+2], %i0
ret ret
restore restore
E SPARC_RET_SINT16 E(SPARC_RET_SINT16)
ldsh [%i2+2], %i0 ldsh [%i2+2], %i0
ret ret
restore restore
E SPARC_RET_UINT32 E(SPARC_RET_UINT32)
ld [%i2], %i0 ld [%i2], %i0
ret ret
restore restore
E SP_V8_RET_CPLX16 E(SP_V8_RET_CPLX16)
ld [%i2], %i0 ld [%i2], %i0
ret ret
restore restore
E SPARC_RET_INT64 E(SPARC_RET_INT64)
ldd [%i2], %i0 ldd [%i2], %i0
ret ret
restore restore
E SPARC_RET_INT128 E(SPARC_RET_INT128)
ldd [%i2], %i0 ldd [%i2], %i0
ldd [%i2+8], %i2 ldd [%i2+8], %i2
ret ret
restore restore
E SPARC_RET_F_8 E(SPARC_RET_F_8)
ld [%i2+7*4], %f7 ld [%i2+7*4], %f7
nop nop
ld [%i2+6*4], %f6 ld [%i2+6*4], %f6
nop nop
E SPARC_RET_F_6 E(SPARC_RET_F_6)
ld [%i2+5*4], %f5 ld [%i2+5*4], %f5
nop nop
ld [%i2+4*4], %f4 ld [%i2+4*4], %f4
nop nop
E SPARC_RET_F_4 E(SPARC_RET_F_4)
ld [%i2+3*4], %f3 ld [%i2+3*4], %f3
nop nop
ld [%i2+2*4], %f2 ld [%i2+2*4], %f2
nop nop
E SPARC_RET_F_2 E(SPARC_RET_F_2)
ldd [%i2], %f0 ldd [%i2], %f0
ret ret
restore restore
E SP_V8_RET_CPLX8 E(SP_V8_RET_CPLX8)
lduh [%i2], %i0 lduh [%i2], %i0
ret ret
restore restore
E SPARC_RET_F_1 E(SPARC_RET_F_1)
ld [%i2], %f0 ld [%i2], %f0
ret ret
restore restore
+40 -39
View File
@@ -42,17 +42,18 @@
#endif #endif
#define L(Y) C1(.L, Y) #define L(Y) C1(.L, Y)
.macro E index #if defined(__sun__) && defined(__svr4__)
.align 16 # define E(INDEX) .align 16
.org 2b + \index * 16 #else
.endm # define E(INDEX) .align 16; .org 2b + INDEX * 16
#endif
#define STACK_BIAS 2047 #define STACK_BIAS 2047
.text .text
.align 8 .align 8
.globl C(ffi_call_v9) .globl C(ffi_call_v9)
.type C(ffi_call_v9),@function .type C(ffi_call_v9),#function
FFI_HIDDEN(C(ffi_call_v9)) FFI_HIDDEN(C(ffi_call_v9))
C(ffi_call_v9): C(ffi_call_v9):
@@ -107,73 +108,73 @@ C(ffi_call_v9):
.align 16 .align 16
2: 2:
E SPARC_RET_VOID E(SPARC_RET_VOID)
return %i7+8 return %i7+8
nop nop
E SPARC_RET_STRUCT E(SPARC_RET_STRUCT)
add %sp, STACK_BIAS-64+128+48, %l2 add %sp, STACK_BIAS-64+128+48, %l2
sub %sp, 64, %sp sub %sp, 64, %sp
b 8f b 8f
stx %o0, [%l2] stx %o0, [%l2]
E SPARC_RET_UINT8 E(SPARC_RET_UINT8)
and %o0, 0xff, %i0 and %o0, 0xff, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SPARC_RET_SINT8 E(SPARC_RET_SINT8)
sll %o0, 24, %o0 sll %o0, 24, %o0
sra %o0, 24, %i0 sra %o0, 24, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SPARC_RET_UINT16 E(SPARC_RET_UINT16)
sll %o0, 16, %o0 sll %o0, 16, %o0
srl %o0, 16, %i0 srl %o0, 16, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SPARC_RET_SINT16 E(SPARC_RET_SINT16)
sll %o0, 16, %o0 sll %o0, 16, %o0
sra %o0, 16, %i0 sra %o0, 16, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SPARC_RET_UINT32 E(SPARC_RET_UINT32)
srl %o0, 0, %i0 srl %o0, 0, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SP_V9_RET_SINT32 E(SP_V9_RET_SINT32)
sra %o0, 0, %i0 sra %o0, 0, %i0
return %i7+8 return %i7+8
stx %o0, [%o2] stx %o0, [%o2]
E SPARC_RET_INT64 E(SPARC_RET_INT64)
stx %o0, [%i2] stx %o0, [%i2]
return %i7+8 return %i7+8
nop nop
E SPARC_RET_INT128 E(SPARC_RET_INT128)
stx %o0, [%i2] stx %o0, [%i2]
stx %o1, [%i2+8] stx %o1, [%i2+8]
return %i7+8 return %i7+8
nop nop
E SPARC_RET_F_8 E(SPARC_RET_F_8)
st %f7, [%i2+7*4] st %f7, [%i2+7*4]
nop nop
st %f6, [%i2+6*4] st %f6, [%i2+6*4]
nop nop
E SPARC_RET_F_6 E(SPARC_RET_F_6)
st %f5, [%i2+5*4] st %f5, [%i2+5*4]
nop nop
st %f4, [%i2+4*4] st %f4, [%i2+4*4]
nop nop
E SPARC_RET_F_4 E(SPARC_RET_F_4)
std %f2, [%i2+2*4] std %f2, [%i2+2*4]
return %i7+8 return %i7+8
std %f0, [%o2] std %f0, [%o2]
E SPARC_RET_F_2 E(SPARC_RET_F_2)
return %i7+8 return %i7+8
std %f0, [%o2] std %f0, [%o2]
E SP_V9_RET_F_3 E(SP_V9_RET_F_3)
st %f2, [%i2+2*4] st %f2, [%i2+2*4]
nop nop
st %f1, [%i2+1*4] st %f1, [%i2+1*4]
nop nop
E SPARC_RET_F_1 E(SPARC_RET_F_1)
return %i7+8 return %i7+8
st %f0, [%o2] st %f0, [%o2]
@@ -213,7 +214,7 @@ E SPARC_RET_F_1
.align 8 .align 8
.globl C(ffi_go_closure_v9) .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)) FFI_HIDDEN(C(ffi_go_closure_v9))
C(ffi_go_closure_v9): C(ffi_go_closure_v9):
@@ -232,7 +233,7 @@ C(ffi_go_closure_v9):
.align 8 .align 8
.globl C(ffi_closure_v9) .globl C(ffi_closure_v9)
.type C(ffi_closure_v9),@function .type C(ffi_closure_v9),#function
FFI_HIDDEN(C(ffi_closure_v9)) FFI_HIDDEN(C(ffi_closure_v9))
C(ffi_closure_v9): C(ffi_closure_v9):
@@ -289,72 +290,72 @@ C(ffi_closure_v9):
! that is deallocated by the return. ! that is deallocated by the return.
.align 16 .align 16
2: 2:
E SPARC_RET_VOID E(SPARC_RET_VOID)
return %i7+8 return %i7+8
nop nop
E SPARC_RET_STRUCT E(SPARC_RET_STRUCT)
ldx [FP-160], %i0 ldx [FP-160], %i0
ldd [FP-160], %f0 ldd [FP-160], %f0
b 8f b 8f
ldx [FP-152], %i1 ldx [FP-152], %i1
E SPARC_RET_UINT8 E(SPARC_RET_UINT8)
ldub [FP-160+7], %i0 ldub [FP-160+7], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_SINT8 E(SPARC_RET_SINT8)
ldsb [FP-160+7], %i0 ldsb [FP-160+7], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_UINT16 E(SPARC_RET_UINT16)
lduh [FP-160+6], %i0 lduh [FP-160+6], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_SINT16 E(SPARC_RET_SINT16)
ldsh [FP-160+6], %i0 ldsh [FP-160+6], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_UINT32 E(SPARC_RET_UINT32)
lduw [FP-160+4], %i0 lduw [FP-160+4], %i0
return %i7+8 return %i7+8
nop nop
E SP_V9_RET_SINT32 E(SP_V9_RET_SINT32)
ldsw [FP-160+4], %i0 ldsw [FP-160+4], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_INT64 E(SPARC_RET_INT64)
ldx [FP-160], %i0 ldx [FP-160], %i0
return %i7+8 return %i7+8
nop nop
E SPARC_RET_INT128 E(SPARC_RET_INT128)
ldx [FP-160], %i0 ldx [FP-160], %i0
ldx [FP-160+8], %i1 ldx [FP-160+8], %i1
return %i7+8 return %i7+8
nop nop
E SPARC_RET_F_8 E(SPARC_RET_F_8)
ld [FP-160+7*4], %f7 ld [FP-160+7*4], %f7
nop nop
ld [FP-160+6*4], %f6 ld [FP-160+6*4], %f6
nop nop
E SPARC_RET_F_6 E(SPARC_RET_F_6)
ld [FP-160+5*4], %f5 ld [FP-160+5*4], %f5
nop nop
ld [FP-160+4*4], %f4 ld [FP-160+4*4], %f4
nop nop
E SPARC_RET_F_4 E(SPARC_RET_F_4)
ldd [FP-160], %f0 ldd [FP-160], %f0
ldd [FP-160+8], %f2 ldd [FP-160+8], %f2
return %i7+8 return %i7+8
nop nop
E SPARC_RET_F_2 E(SPARC_RET_F_2)
ldd [FP-160], %f0 ldd [FP-160], %f0
return %i7+8 return %i7+8
nop nop
E SP_V9_RET_F_3 E(SP_V9_RET_F_3)
ld [FP-160+2*4], %f2 ld [FP-160+2*4], %f2
nop nop
ld [FP-160+1*4], %f1 ld [FP-160+1*4], %f1
nop nop
E SPARC_RET_F_1 E(SPARC_RET_F_1)
ld [FP-160], %f0 ld [FP-160], %f0
return %i7+8 return %i7+8
nop nop