aboutsummaryrefslogtreecommitdiff
path: root/libffi/src/ia64
diff options
context:
space:
mode:
authorSteve Ellcey <sje@cup.hp.com>2005-03-30 21:49:19 +0000
committerSteve Ellcey <sje@cup.hp.com>2005-03-30 21:49:19 +0000
commit39b350eaf6570d3ab667f4193e536642da456551 (patch)
tree10e1e1455e8fd4ae02f1c598a9fdf6a896993cc3 /libffi/src/ia64
parent84e0a40cf4cc92773965ec49feecccc921b11c62 (diff)
* 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: https://gcc.gnu.org/svn/gcc/trunk@97283 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/src/ia64')
-rw-r--r--libffi/src/ia64/ffitarget.h4
-rw-r--r--libffi/src/ia64/unix.S51
2 files changed, 18 insertions, 37 deletions
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