OSDN Git Service

* amd64-tdep.c (amd64_classify): Add support for decimal float
authorThiago Jung Bauermann <bauerman@br.ibm.com>
Tue, 26 Feb 2008 22:23:45 +0000 (22:23 +0000)
committerThiago Jung Bauermann <bauerman@br.ibm.com>
Tue, 26 Feb 2008 22:23:45 +0000 (22:23 +0000)
types.
* i386-tdep.c (i386_return_value): Make 128-bit decimal float
use the struct return convention.

gdb/ChangeLog
gdb/amd64-tdep.c
gdb/i386-tdep.c

index e3b36ab..afd7ef1 100644 (file)
@@ -1,3 +1,10 @@
+2008-02-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
+
+       * amd64-tdep.c (amd64_classify): Add support for decimal float
+       types.
+       * i386-tdep.c (i386_return_value): Make 128-bit decimal float
+       use the struct return convention.
+
 2008-02-26  Nick Roberts  <nickrob@snap.net.nz>
 
        * breakpoint.c (print_one_breakpoint_location): Revert Enb field
index fae24a4..6cc82bb 100644 (file)
@@ -364,15 +364,19 @@ amd64_classify (struct type *type, enum amd64_reg_class class[2])
       && (len == 1 || len == 2 || len == 4 || len == 8))
     class[0] = AMD64_INTEGER;
 
-  /* Arguments of types float, double and __m64 are in class SSE.  */
-  else if (code == TYPE_CODE_FLT && (len == 4 || len == 8))
+  /* Arguments of types float, double, _Decimal32, _Decimal64 and __m64
+     are in class SSE.  */
+  else if ((code == TYPE_CODE_FLT || code == TYPE_CODE_DECFLOAT)
+          && (len == 4 || len == 8))
     /* FIXME: __m64 .  */
     class[0] = AMD64_SSE;
 
-  /* Arguments of types __float128 and __m128 are split into two
-     halves.  The least significant ones belong to class SSE, the most
+  /* Arguments of types __float128, _Decimal128 and __m128 are split into
+     two halves.  The least significant ones belong to class SSE, the most
      significant one to class SSEUP.  */
-  /* FIXME: __float128, __m128.  */
+  else if (code == TYPE_CODE_DECFLOAT && len == 16)
+    /* FIXME: __float128, __m128.  */
+    class[0] = AMD64_SSE, class[1] = AMD64_SSEUP;
 
   /* The 64-bit mantissa of arguments of type long double belongs to
      class X87, the 16-bit exponent plus 6 bytes of padding belongs to
index 83ae9d1..dc1202e 100644 (file)
@@ -1579,10 +1579,12 @@ i386_return_value (struct gdbarch *gdbarch, struct type *type,
 {
   enum type_code code = TYPE_CODE (type);
 
-  if ((code == TYPE_CODE_STRUCT
-       || code == TYPE_CODE_UNION
-       || code == TYPE_CODE_ARRAY)
-      && !i386_reg_struct_return_p (gdbarch, type))
+  if (((code == TYPE_CODE_STRUCT
+       || code == TYPE_CODE_UNION
+       || code == TYPE_CODE_ARRAY)
+       && !i386_reg_struct_return_p (gdbarch, type))
+      /* 128-bit decimal float uses the struct return convention.  */
+      || (code == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 16))
     {
       /* The System V ABI says that: