diff options
author | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-30 21:49:19 +0000 |
---|---|---|
committer | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-30 21:49:19 +0000 |
commit | 3bdc9b0e43017ac69a1d5842efdf9e9e8ea99ce5 (patch) | |
tree | 10e1e1455e8fd4ae02f1c598a9fdf6a896993cc3 /libffi | |
parent | a6d108f6c2ca3420648291fb37936ddd3e7960bd (diff) | |
download | gcc-3bdc9b0e43017ac69a1d5842efdf9e9e8ea99ce5.tar.gz |
* src/ia64/ffitarget.h (ffi_arg) ADD DI attribute.
(ffi_sarg) Ditto.
* src/ia64/unix.S (ffi_closure_unix): Extend gp
to 64 bits in ILP32 mode.
Load 64 bits even for short data.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97283 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi')
-rw-r--r-- | libffi/ChangeLog | 8 | ||||
-rw-r--r-- | libffi/src/ia64/ffitarget.h | 4 | ||||
-rw-r--r-- | libffi/src/ia64/unix.S | 51 |
3 files changed, 26 insertions, 37 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog index fa801d1539c..a9fa1dfe098 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,11 @@ +2005-03-30 Steve Ellcey <sje@cup.hp.com> + + * src/ia64/ffitarget.h (ffi_arg) ADD DI attribute. + (ffi_sarg) Ditto. + * src/ia64/unix.S (ffi_closure_unix): Extend gp + to 64 bits in ILP32 mode. + Load 64 bits even for short data. + 2005-03-23 Mike Stump <mrs@apple.com> * src/powerpc/darwin.S: Update for -m64 multilib. diff --git a/libffi/src/ia64/ffitarget.h b/libffi/src/ia64/ffitarget.h index 2f98d51c429..51bc768efd0 100644 --- a/libffi/src/ia64/ffitarget.h +++ b/libffi/src/ia64/ffitarget.h @@ -27,8 +27,8 @@ #define LIBFFI_TARGET_H #ifndef LIBFFI_ASM -typedef unsigned long ffi_arg; -typedef signed long ffi_sarg; +typedef unsigned long ffi_arg __attribute__ ((mode (DI))); +typedef signed long ffi_sarg __attribute__ ((mode (DI))); typedef enum ffi_abi { FFI_FIRST_ABI = 0, diff --git a/libffi/src/ia64/unix.S b/libffi/src/ia64/unix.S index 7c68b2d3a62..45dabb74c9e 100644 --- a/libffi/src/ia64/unix.S +++ b/libffi/src/ia64/unix.S @@ -290,8 +290,13 @@ ffi_closure_unix: .body /* Retrieve closure pointer and real gp. */ +#ifdef _ILP32 + addp4 out0 = 0, gp + addp4 gp = 16, gp +#else mov out0 = gp add gp = 16, gp +#endif ;; ld8 gp = [gp] @@ -368,31 +373,7 @@ ffi_closure_unix: add sp = FRAME_SIZE, sp br.ret.sptk.many b0 ;; -.Lld_int8: - .body - .copy_state 1 - ld1 r8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_int16: - .body - .copy_state 1 - ld2 r8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_int32: - .body - .copy_state 1 - ld4 r8 = [r16] - .restore sp - add sp = FRAME_SIZE, sp - br.ret.sptk.many b0 - ;; -.Lld_int64: +.Lld_int: .body .copy_state 1 ld8 r8 = [r16] @@ -554,20 +535,20 @@ ffi_closure_unix: .Lld_table: data8 @pcrel(.Lld_void) // FFI_TYPE_VOID - data8 @pcrel(.Lld_int32) // FFI_TYPE_INT + data8 @pcrel(.Lld_int) // FFI_TYPE_INT data8 @pcrel(.Lld_float) // FFI_TYPE_FLOAT data8 @pcrel(.Lld_double) // FFI_TYPE_DOUBLE data8 @pcrel(.Lld_ldouble) // FFI_TYPE_LONGDOUBLE - data8 @pcrel(.Lld_int8) // FFI_TYPE_UINT8 - data8 @pcrel(.Lld_int8) // FFI_TYPE_SINT8 - data8 @pcrel(.Lld_int16) // FFI_TYPE_UINT16 - data8 @pcrel(.Lld_int16) // FFI_TYPE_SINT16 - data8 @pcrel(.Lld_int32) // FFI_TYPE_UINT32 - data8 @pcrel(.Lld_int32) // FFI_TYPE_SINT32 - data8 @pcrel(.Lld_int64) // FFI_TYPE_UINT64 - data8 @pcrel(.Lld_int64) // FFI_TYPE_SINT64 + data8 @pcrel(.Lld_int) // FFI_TYPE_UINT8 + data8 @pcrel(.Lld_int) // FFI_TYPE_SINT8 + data8 @pcrel(.Lld_int) // FFI_TYPE_UINT16 + data8 @pcrel(.Lld_int) // FFI_TYPE_SINT16 + data8 @pcrel(.Lld_int) // FFI_TYPE_UINT32 + data8 @pcrel(.Lld_int) // FFI_TYPE_SINT32 + data8 @pcrel(.Lld_int) // FFI_TYPE_UINT64 + data8 @pcrel(.Lld_int) // FFI_TYPE_SINT64 data8 @pcrel(.Lld_void) // FFI_TYPE_STRUCT - data8 @pcrel(.Lld_int64) // FFI_TYPE_POINTER + data8 @pcrel(.Lld_int) // FFI_TYPE_POINTER data8 @pcrel(.Lld_small_struct) // FFI_IA64_TYPE_SMALL_STRUCT data8 @pcrel(.Lld_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT data8 @pcrel(.Lld_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE |