little-endian ppc64 support
This commit is contained in:
@@ -159,25 +159,41 @@ ENTRY(ffi_closure_SYSV)
|
||||
#endif
|
||||
|
||||
# case FFI_TYPE_UINT8
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
lbz %r3,112+0(%r1)
|
||||
#else
|
||||
lbz %r3,112+3(%r1)
|
||||
#endif
|
||||
mtlr %r0
|
||||
addi %r1,%r1,144
|
||||
blr
|
||||
|
||||
# case FFI_TYPE_SINT8
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
lbz %r3,112+0(%r1)
|
||||
#else
|
||||
lbz %r3,112+3(%r1)
|
||||
#endif
|
||||
extsb %r3,%r3
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
|
||||
# case FFI_TYPE_UINT16
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
lhz %r3,112+0(%r1)
|
||||
#else
|
||||
lhz %r3,112+2(%r1)
|
||||
#endif
|
||||
mtlr %r0
|
||||
addi %r1,%r1,144
|
||||
blr
|
||||
|
||||
# case FFI_TYPE_SINT16
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
lha %r3,112+0(%r1)
|
||||
#else
|
||||
lha %r3,112+2(%r1)
|
||||
#endif
|
||||
mtlr %r0
|
||||
addi %r1,%r1,144
|
||||
blr
|
||||
@@ -239,9 +255,15 @@ ENTRY(ffi_closure_SYSV)
|
||||
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
mtlr %r0
|
||||
addi %r1,%r1,144
|
||||
blr
|
||||
#else
|
||||
srwi %r3,%r3,8
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
#endif
|
||||
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
@@ -252,20 +274,35 @@ ENTRY(ffi_closure_SYSV)
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
lwz %r4,112+4(%r1)
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
#else
|
||||
li %r5,24
|
||||
b .Lstruct567
|
||||
#endif
|
||||
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
lwz %r4,112+4(%r1)
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
+#else
|
||||
li %r5,16
|
||||
b .Lstruct567
|
||||
#endif
|
||||
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
lwz %r4,112+4(%r1)
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
#else
|
||||
li %r5,8
|
||||
b .Lstruct567
|
||||
#endif
|
||||
|
||||
# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
|
||||
lwz %r3,112+0(%r1)
|
||||
@@ -273,6 +310,7 @@ ENTRY(ffi_closure_SYSV)
|
||||
mtlr %r0
|
||||
b .Lfinish
|
||||
|
||||
#ifndef __LITTLE_ENDIAN__
|
||||
.Lstruct567:
|
||||
subfic %r6,%r5,32
|
||||
srw %r4,%r4,%r5
|
||||
@@ -288,7 +326,8 @@ ENTRY(ffi_closure_SYSV)
|
||||
mtlr %r0
|
||||
addi %r1,%r1,144
|
||||
blr
|
||||
|
||||
#endif
|
||||
|
||||
END(ffi_closure_SYSV)
|
||||
|
||||
.section ".eh_frame",EH_FRAME_FLAGS,@progbits
|
||||
|
||||
Reference in New Issue
Block a user